I have a class with a method that generates random data to fill arrays with. The class had the data member private final Random rnd that is initialized in the constructor with new Random();. This is used in the method for generating data for arrays.
For example
package test;
import java.util.Random;
public class WorkWithArrays {
WorkWithArrays(Object[] arr) {
rand = new Random();
fillArrays(arr);
}
/*fills arrays with random data;
since this method is called from constructor
must be declared final*/
public final void fillArrays(Object[] arr) {
//code goes here
}
/*some other methods and data members*/
final private Random rand;
}
I am writing a new class which I also need to fill arrays with random values. Is there a way I could not have to rewrite the same method? I could extend the class or I could make the method static. Since I only need fillArrays() making it static seems like the better option over extending.
So let's make it static.
public static final void fillArrays(Object[] arr) {
//code goes here
}
Now fillArrays() uses rand which is a problem because rand isn't static. So why not make it static? Now in WorkWithArrays we no longer initialize rand in the constructor but have it final static private Random rand = new Random(); as a data member. Is this right? It seems like bad practice to initialize things outside of the constructor.
Now I can do
package test;
MyNewClass {
someMethod() {
int[] x = new int[25];
WorkWithArrays.fillArrays(x);
}
}