使用反射Java初始化通用类

时间:2019-04-26 14:20:28

标签: java reflection

我当前正在自动化数据处理程序的过程。我的意思是自动化是根据特定配置通过 reflection 自动启动DataHandlers。

但是我不知道该如何解决这个问题。关于这种和平的代码:

Class<?> clazz = classLoader.loadClass(d);
Object values = clazz.getMethod("values").invoke(null);
RSA.addDataHandler(clazz,new DataHandlerSetAdapter<>(values));

我正在通过classLoader加载类,并调用一个称为“ values”的静态方法,该方法返回了一堆(建议使用)值!

现在问题出在new DataHandlerSetAdapter<>(values))上,<>出现错误,因为对象不知道要启动哪个分类

  

无法推断参数(无法解析构造函数)

此代码是否将在C#中使用typeof(),但在JAVA中,可能没有instanceof这样的东西,但是我现在不能使用它。顺便说一句, .values()返回一个具有相同类型类(枚举)的数组

我该如何解决这个问题?

//编辑

使用方法上的方法.getReturnType(),我将获得返回类型,但无法将其应用于DataHandlerSetAdapter<>

DataHandlerSetAdapter类

public class DataHandlerSetAdapter<T> implements DataHandler<T> {
    private final Set<T> values = new ConcurrentSkipListSet<>();
    . 
    . 
    .
}

1 个答案:

答案 0 :(得分:0)

我不清楚您要做什么。但是,如果可加载类是一个枚举,那么为什么不这样做呢?

Class<? extends Enum<?>> clazz = classLoader.loadClass(d);
Enum<?>[] values = clazz.getEnumConstants();
RSA.addDataHandler(clazz, new DataHandlerSetAdapter<>(values));

或者,您可以使用原始类型: RSA.addDataHandler(clazz, new DataHandlerSetAdapter(values))-注意没有钻石<>

但是我仍然不确定天气是否对您有用。请提供以下信息,以了解失败的根本原因。

  • DataHandlerSetAdapter构造函数的签名
  • RSA.addDataHandler(...)方法的签名
  • 有关您在代码段中使用的RSA的更多信息。 (例如,是类还是对象)