以下测试通过
@Test
public void myClass() throws Exception {
Class<?> cl = Class.forName("miscellaneous.so.myclass.MyClass");
MyClass myObject = (MyClass) cl.getConstructor().newInstance();
Assert.assertNotNull(myObject.fu);
myObject = (MyClass) cl.getConstructor().newInstance();
myObject.myMalloc();
Assert.assertNotNull(myObject.fu);
}
问题很可能出在您获得Class
实例的女巫的代码中。
编辑
我怀疑你从那个列表中得到了一些类,它是它的子类,MyClass
并且在调用它的构造函数时MyClass
不会初始化fu
public class MyClass {
HashMap<String, String> fu;
public void myMalloc() {
fu = new HashMap<>();
}
}
public class MyClassSub extends MyClass {
}
在这种情况下,代码的行为与您描述的一样,并且以下测试也通过了
@Test
public void myClassSub() throws Exception {
Class<?> cl = Class.forName("miscellaneous.so.myclass.MyClassSub");
MyClass myObject = (MyClass) cl.getConstructor().newInstance();
// Note that here the reference is asserted to be null
Assert.assertNull(myObject.fu);
myObject = (MyClass) cl.getConstructor().newInstance();
myObject.myMalloc();
Assert.assertNotNull(myObject.fu);
}