0
我试图用反射修改抽象类中的私有字段。
我已经是成功的一个普通班,但在这种情况下,我的代码无法正常工作:使用反射修改抽象类中的字段
public abstract class AbstractClass{
private String str;
public void func1(){
//...
}
}
public MyClass extends AbstractClass{}
// JUnit
MyClass tester = new MyClass();
Class<?> secretClass = tester.getClass();
Field fields[] = secretClass.getDeclaredFields();
@Before
public void setup() {
for (Field field : fields) {
try {
field.setAccessible(true);
if (field.getName().equals("str")) {
field.set(tester, "Hello");
System.out.println(field.getName());
}
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
// some testing
@Test
public void testFunc1() {
//tester.func1();
}
它不能访问字符串str
在AbstractClass
。这里没有显示输出。如果我将str
复制到MyClass
,它可以正常工作。
抽象类中的字段是私有的。是否有机会访问和修改这些字段? 如何测试抽象类呢? – user1170330 2014-09-22 19:32:12
@ user1170330正如我所说的,访问具体子类的父类并使用它的'getDeclaredFields()'方法。测试和抽象类取决于类本身。测试具体的子类可能会覆盖测试其父类。 – 2014-09-22 19:34:30
如何从子类中获取抽象类?有没有像'this.getAbstractClass()',我可以从子类调用? – user1170330 2014-09-22 19:39:31