使用反射检索整数字段值时出现异常

Raf*_*aeu 1 java reflection type-conversion

我使用 JDK 1.8 并尝试检索字段的值,该字段被标记为Integer而不是int

我无法将数据类型更改为 int 因为此类由 Lucene 和 OR/M 使用,所以我只能使用 Reflection 来玩它

private Integer fee;

public Integer getFee() {
    return fee;
}

public void setFee(Integer fee) {
    this.fee = fee;
}
Run Code Online (Sandbox Code Playgroud)

当我执行以下操作时:

Field field = myClass.getClass().getDeclaredField("fee");
field.setAccessible(true);
Integer fee = field.getInt(myInstance);
Run Code Online (Sandbox Code Playgroud)

我得到这个异常:

java.lang.IllegalArgumentException: 
Attempt to get java.lang.Integer field "com.xyz.models.MyModel.fee" 
with illegal data type conversion to int
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 5

两个问题:

  • 它不是 int,所以不要使用getInt. 使用get并施放它。
  • 您正在传递一个字符串“fee”,它需要一些类实例

Field field = Foo.class.getDeclaredField("fee");
field.setAccessible(true);
Integer fee = (Integer) field.get(someInstance);
Run Code Online (Sandbox Code Playgroud)

鉴于您的类已经有一个吸气剂,我不明白为什么您需要通过反射访问该字段。只需使用someInstance.getFee().