我最近遇到了以下错误,这让我很困惑。我已经导入了反射。我有一个类(称为工人),其字段是一个名为 numOfJobs 的私有 int。在 Worker 的构造函数中,numOfJobs 设置为 0。然后,在测试器类中,我创建了一个 worker 类型的实例:
waterBenders[0] = new Worker();
Field []fields = waterBenders[0].getClass().getDeclaredFields();
Field privateFieldJobs = fields[0];
privateFieldJobs.setAccessible(true);
try{
System.out.println(privateFieldJobs.get(waterBenders[0]));
System.out.println(privateFieldJobs.get(waterBenders[0]).getClass());
System.out.println((int)privateFieldJobs.get(waterBenders[0]));
}
这是包含错误的尝试框中的第三行。前两行打印:
0
class java.lang.Integer
这对我来说很有意义。但是,如果对象 privateFieldJobs.get(waterBenders[0]) 是“值”为 0 的 Integer 类型的对象,那么为什么 (int)privateFieldJobs.get(waterBenders[0]) 会抛出错误:
Cannot cast from java.lang.Object to int
如果我要创建一个整数类型的普通对象,那么这种类型的转换通常可以工作。这个例子有什么特别之处?我想这与这个 Integer 对象来自 fields 数组的事实有关。
我的工人阶级本质上是:
public class Worker extends Unit{
private int numOfJobs;
public Worker(Tile position, double hp, String faction) {
super(position, hp, 2, faction);
this.numOfJobs = 0;
}
public int getNumOfJobs(){
return this.numOfJobs;
}
}
任何帮助,将不胜感激。