我收到一个错误,指出即使我在构造函数中初始化了size变量,也可能没有初始化它。为什么这不起作用?=
public class Ore {
protected static final float size;
protected String name;
protected int itemID;
protected ArrayList<Mineral> minerals;
public Ore(float size, String name, int itemID){
this.size = size;
this.name = name;
this.itemID = itemID;
}
public String getPrizeData(int itemNumber){
String data = null;
return data;
}
public float getPrice(){
float price = 0;
return price;
}
}
答案 0 :(得分:4)
从大小中删除static
修饰符...我很确定你不想在那里;)
答案 1 :(得分:1)
protected static final float size;
final
和static
的组合在java中被视为 CONSTANT ,编译器替换了常量名称( Here size
)代码中的任何地方及其在编译期间的值,因此不允许在constructor
初始化它并生成编译时错误。
所以要么选择 vikingsteve的解决方案,要么在宣布时初始化它。
答案 2 :(得分:0)
size
是一个静态字段。因此,它必须直接在声明中初始化或形成静态初始化程序,即如下所示:
public class Ore {
protected static final float size;
static{
size = // add something here
}
//....
}
答案 3 :(得分:0)
可以从Ore
派生类,并在引用size
的派生类中实现公共静态函数。这是在初始化之前可以访问size
并且编译器正确识别它的一种方式。
一种解决方法是在Ore
中使用静态初始化程序段初始化size
,或将其值设置为文字:protected static final float size = /*ToDo - a literal here*/;