gpt4 book ai didi

Java反射: casting Integer coming from a class's field

转载 作者:行者123 更新时间:2023-12-01 17:43:24 25 4
gpt4 key购买 nike

我最近遇到了以下错误,这让我很困惑。我已经导入了反射。我有一个类(称为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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com