【发布时间】:2019-03-14 23:39:17
【问题描述】:
我想从一个扩展类中获取param2 值,该扩展类具有与抽象类“B”共享的公共属性,如下所示:
import java.lang.reflect.Field;
public class Fields {
public class A{
public abstract class B{
int param1;
String param2;
public abstract void B ();
}
public class B0 extends B{
@Override
public void B() {
this.param1 = 0;
this.param2 = "Mario";
}
}
public class B1 extends B{
@Override
public void B() {
this.param1 = 1;
this.param2 = "Anna";
}
}
B1 b1 = new B1();
public A (){
b1.B();
}
public B0 GetB(Object AnyB){
B0 tmp_b0 = (B0) AnyB;
return tmp_b0;
}
}
public Fields(){
A a = new A();
Field[] f = a.getClass().getDeclaredFields();
for (int i = 0; i<f.length; i++){
f[i].setAccessible(true);
Object obj = f[i];
String p2;
p2 = a.GetB(obj).param2;
System.out.println(p2);
}
}
public static void main(String [] args){
Fields f = new Fields();
}
}
正式的指令B0 tmp_b0 = (B0) AnyB; 是正确的,但在运行时我得到错误:Exception in thread "main" java.lang.ClassCastException: java.lang.reflect.Field cannot be cast to Fields$A$B0。
为什么?
有一种方法可以获取参数param1或param2的值。
有办法吗?
谢谢
【问题讨论】:
-
对于新版本的问题,我仍然强烈建议您开始遵循 Java 命名约定,并避免嵌套类,除非您确实需要它们。
标签: java class reflection casting