gpt4 book ai didi

java - 使用泛型动态实例化类型

转载 作者:行者123 更新时间:2023-11-30 04:39:58 24 4
gpt4 key购买 nike

我猜我绝对不可能做这样的事情:

Class c = Class.forName("Processor<Integer, String>");

在Java中? (当然,我之前定义了处理器)。

最佳答案

绝对不可能,因为泛型参数只能在编译时存在。 Class 对象在运行时是相同的。它不是 C++ 中的类模板。类型参数只是java编译器的信息。

您可以尝试通过创建一个类来完成类似的事情:

class IntStringProcessor extends Processor<Integer, String> {}

Class c = Class.forName("IntStringProcessor");

在运行时,您可以通过c.getGenericSuperclass()获取实际的Processor类型参数,但这扩展了我猜测的问题。

编辑:另一个想法

您的处理器可能会将类保留为参数,然后:

Class c1 = Class.forName("java.lang.Integer");
Class c2 = Class.forName("java.lang.String");
Processor = new Processor(c1,c2);

您的处理器现在不是通用的,而是在内部使用类实例。正如我所说,无法在运行时创建泛型实例,因为泛型仅在编译时存在。

关于java - 使用泛型动态实例化类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537482/

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