2013-04-09 88 views
1

Java反射Java反射NoSuchMethod異常,當分配實現類接口

我有界面如下

public Interface A { void print();} 

Inteface執行如下

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/C我有多個實施,其中包含不同的屬性..

+0

'NoSuchMethodException'?你確定?你沒有用反射來引用任何方法。 – 2013-04-09 20:34:46

+0

我認爲它確實是一個'NoSuchFieldException'。 – rgettman 2013-04-09 20:35:50

回答

6

getField()方法將只發現該字段,如果它是public。您可以使用getDeclaredField方法,該方法將直接在類上聲明該字段,無論是否爲public

當你說getClass(),你會得到運行時Class(這裏,B),即使變量a的類型爲接口A

+0

真棒,我能夠訪問它,但不能改變它 – 2013-04-09 20:34:32

+0

BeanUtils.setProperty(客戶,「firstName」,「保羅楊」);在設置或獲取值之前爲我工作 – 2013-04-09 20:41:05

+1

調用'field.setAccessible(true)'。 – 2013-04-09 20:55:28

0
Field[] declaredFields = dtoKlass.getDeclaredFields(); 

做這樣的事情。我使用getDeclaredField()來完成你想要實現的功能。