我当前正在自动化数据处理程序的过程。我的意思是自动化是根据特定配置通过 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<>
public class DataHandlerSetAdapter<T> implements DataHandler<T> {
private final Set<T> values = new ConcurrentSkipListSet<>();
.
.
.
}
答案 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
的更多信息。 (例如,是类还是对象)