1

Java 反射

我有如下界面

public Interface A { void print();}

接口实现如下

public class B implements A {

int abc =0;
public void setAbc(int abc){this.abc=abc;}
public int getAbc(return this.abc;);

void print(){
System.out.println("Hello world");
}

}

现在我将孩子分配到界面中,如下所示

A a = new B();

使用反射我试图从父母访问孩子如下

Class clazz = a.getClass()
clazz.getField("abc").set(a, new Integer(1456));

但我发现没有这样的方法异常

有什么快速帮助吗?我将孩子分配到父母 b/ci 有多个包含不同属性的实现..

4

2 回答 2

6

getField()方法只会找到该字段,如果它是public. 您可以使用该getDeclaredField方法,如果它直接在类上声明,它将找到该字段,无论它是否public

当您说 时getClass(),您将获得运行时Class(此处为B),即使变量a类型为 interface A

于 2013-04-09T20:31:43.237 回答
0
Field[] declaredFields = dtoKlass.getDeclaredFields();

做这样的事情。我使用 getDeclaredField() 来完成您想要实现的目标。

于 2013-04-09T20:33:50.197 回答