将实现的类分配给接口时,Java Reflection NoSuchMethod异常

d-m*_*man 1 java reflection

Java反思

我的界面如下

public Interface A { void print();}
Run Code Online (Sandbox Code Playgroud)

接口实现如下

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");
}

}
Run Code Online (Sandbox Code Playgroud)

现在我将child分配给接口如下

A a = new B();
Run Code Online (Sandbox Code Playgroud)

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

Class clazz = a.getClass()
clazz.getField("abc").set(a, new Integer(1456));
Run Code Online (Sandbox Code Playgroud)

但我发现没有这样的方法例外

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

rge*_*man 6

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

当你说getClass(),你将得到运行时Class(这里B),即使变量a被输入为接口A.