作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近遇到了以下错误,这让我很困惑。我已经导入了反射。我有一个类(称为worker),其字段是一个名为numOfJobs 的私有(private)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]) 是“value”为 0 的 Integer 类型的对象,那么为什么 (int)privateFieldJobs.get(waterBenders[0]) 会抛出错误:
Cannot cast from java.lang.Object to int
如果我要创建一个 Integer 类型的普通对象,那么这种类型的转换通常有效。这个例子有什么特别之处?我想这与这个 Integer 对象来自 fields 数组这一事实有关。
我的 worker 类(Class)本质上是:
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;
}
}
如有任何帮助,我们将不胜感激。
最佳答案
这是因为Field#get返回一个Object,而在java中你不能将任何Object类型转换为原始类型。如果您想要来自 Integer 对象的原始整数值,您可以执行类似的操作
Integer field = (Integer) privateFieldJobs.get(waterBenders[0]);
int value = field.intValue();
关于Java反射: casting Integer coming from a class's field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58208541/
我是一名优秀的程序员,十分优秀!