static массив объектов в классе
Хочу создать массив объектов дочерних классов для неявного обращения к нему, но ругается на то что этот массив является static.
public class Product {
protected int id;
private static int storageVolume;
Product (int id){
this.id = id;
}
public void getStats(){
System.out.println(id);
}
public void getId(){
System.out.println(id);
}
public void setId(int id){
this.id = id;
}
public static void createStorage(int storageVolume){
this.storageVolume = storageVolume;
static Product[] storage = new Product[this.storageVolume];
}
}
'com.autasalon.Product.this' cannot be referenced from a static context
Modifier 'static' not allowed here
'com.autasalon.Product.this' cannot be referenced from a static context
Ответы (3 шт):
Модификатор static означает, что к вашему массиву можно будет обратиться не через объект типа, а через сам тип.
Но всё, что создается в методе, будет уничтожено, когда метод покинет стек.
Из этого следует вывод, что модификатор static нельзя использовать в методе, так как static переменная должна существовать, пока существует тип, то есть static переменная должна являться полем типа.
И второй момент - static метод вызывается через тип, а не объект, поэтому внутри static метода не может быть this.
Статический метод не может обратиться к экземпляру класса, и вообще к не статическим данным
public static void createStorage(int storageVolume){
static Product[] storage = new Product[storageVolume];
......
}
либо как-то так
public static void createStorage(int storageVolume){
Product.storageVolume = storageVolume;
static Product[] storage = new Product[storageVolume];
}
static Product[] storage;
public static void createStorage(int storageVolume){
Product.storageVolume = storageVolume;
storage = new Product[Product.storageVolume];
}