gpt4 book ai didi

java - 使用反射 Java 初始化通用类

转载 作者:行者123 更新时间:2023-12-02 06:16:22 26 4
gpt4 key购买 nike

我目前正在自动化数据处理程序的流程。我所说的自动化是指数据处理程序是根据特定配置通过反射自动启动的。

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

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

我通过类加载器加载类,并调用一个名为“values”的静态方法,该方法返回一堆(您建议正确的)值!

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

Cannot infer arguments (unable to resolve constructor)

如果这段代码是在 C# 中,我会使用 typeof() 但在 JAVA 中没有这样的东西,也许是 instanceof,但我现在不能使用它。顺便说一句 .values() 返回相同类型类(枚举)的数组

如何解决这个问题?

//编辑

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

类 DataHandlerSetAdapter

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

最佳答案

我不清楚你想做什么。但是如果可加载类是一个枚举,那么为什么你不这样做:

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 的更多信息您在代码片段中使用了。 (例如,它是类还是对象)

  • 关于java - 使用反射 Java 初始化通用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55869599/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com