繁体   English   中英

使用Java Reflection实例化对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM