[英]Instantiating an Object using Java Reflection
我正在使用JUnit
测试一个private
方法,我正在使用Reflection
调用它。 我得到的错误是java.lang.InstantiationException
。 我知道它不是创建Class
的实例,但我不确定我做错了什么。 Object object = clazz.newInstance();
是抛出Exception
的行。
正在测试的方法
private int _getType(String type) {
if ("DATE".equalsIgnoreCase(type)) return Types.DATE;
if ("STRING".equalsIgnoreCase(type)) return Types.VARCHAR;
if ("INT".equalsIgnoreCase(type)) return Types.INTEGER;
if ("TIMESTAMP".equalsIgnoreCase(type)) return Types.TIMESTAMP;
return Types.NULL;
}
JUnit测试
@Test
public void testGetType() throws Exception {
String type1 = "DATE";
String type2 = "STRING";
String type3 = "INT";
String type4 = "TIMESTAMP";
Class clazz = SpringStoredProcImpl.class;
Object object = clazz.newInstance();
Method method = object.getClass().getDeclaredMethod("getType", String.class);
method.setAccessible(true);
method.invoke(object, type1);
我还没有我的断言所以请忽略它。
提前致谢。
您尝试使用no argument constructor
创建一个实例,该实例在您的案例中确实存在。
由于构造函数是public
您应该首先使用new
关键字创建对象,然后从Method method...
开始执行其余代码Method method...
仅供参考,如果您想通过反射创建对象,它将类似于clazz.getConstructor(DataSource.class, String.class, ArrayList.class).newInstance(dataSource, sprocName, params)
而不仅仅是clazz.newInstance()
不同的答案:不要那样做。
为什么你认为你需要将这个方法设为私有? 看起来这个方法的责任是根据字符串输入“查找”枚举类型。 我认为简单地使这个方法包受到保护并避免反射开销/麻烦会更有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.