java反射无法获取_Java反射'无法设置'错误

我正在尝试使用Java反射来获取通用Field属性的实例,以便执行此Field的方法。

例如,如果我使用getValue()方法创建类型为MyType的类,并且我有另一个具有MyType类属性的MyContainer类,那么我正在寻找的是动态获取此Field并执行getValue()方法。这可能吗?

使用以下代码结构,我得到:

Exception in thread "main" java.lang.IllegalArgumentException: Can not set test.MyType field test.MyContainer.field1 to test.MyType

at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)

at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)

at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)

at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)

at java.lang.reflect.Field.get(Field.java:393)

at test.Main.main(Main.java:24)myContainer中

public class MyContainer {

MyType field1;

MyType field2;

public MyContainer() {

super();

}

public MyContainer(MyType field1, MyType field2) {

super();

this.field1 = field1;

this.field2 = field2;

}

public MyType getField1() {

return field1;

}

public MyType getField2() {

return field2;

}

}我的风格

public class MyType {

private MyEnum var1;

private String var2;

public MyType() {

super();

}

public MyType(MyEnum var1, String var2) {

this.var1 = var1;

this.var2 = var2;

}

public MyEnum getVar1() {

return var1;

}

public String getVar2() {

return var2;

}

}MyEnum

public enum MyEnum {

A(""),

N("0");

private final String value;

private MyEnum(String value) {

this.value = value;

}

@Override

public String toString() {

return this.value;

}

}执行

java.lang.reflect.Field[] allFields = MyContainer.class.getDeclaredFields();

MyType obj = new MyType();

for (java.lang.reflect.Field field : allFields) {

if ( MyType.class == field.getType() ){

field.setAccessible(true);

MyType myAux = (MyType) field.get(obj);

String dowhatever = myAux.getVar2();

}

}正如你在例外中看到的那样,test.MyType字段类型似乎完全等同于铸造中提供的test.MyType。我做错了什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值