创建从类装入器动态获取的泛型类型的 java ArrayList 实例

Creating a java ArrayList instance of a generic type obtained dynamically from a classloader

提问人:JJR 提问时间:11/14/2023 更新时间:11/14/2023 访问量:36

问:

我正在尝试创建一个 ArrayList,其泛型类型将从外部 pojo 文件动态派生。

无论如何要完成这项工作?

到目前为止,我有这个——

File pojoJarFile = pojoJarFile = new File("C:/Test/my-pojo.jar");
URLClassLoader genericClassLoader = new URLClassLoader(new URL[]{pojoJarFile.toURI().toURL()});
Class genericClassRef = genericClassLoader.loadClass("com.mypackage.MyClass");
List<genericClassRef> listInstance = new ArrayList<genericClassRef>();

但它在编译时失败了,出现错误 -

java:找不到符号 符号:class genericClassRef 位置: class qmo.kafka.test.harness.QmoKafkaMessageBuilder

Java 泛型 数组列表

评论

0赞 VGR 11/15/2023
您的列表必须定义为 .不能将实际类型放入代码中,因为尚未使该类型可供编译器使用。List<Object>
0赞 JJR 11/15/2023
这行得通。谢谢!

答:

0赞 minus 11/14/2023 #1

此代码语法是错误的,同时不清楚您要实现的目标。

您可以写入但不能写入,或者介于<>之间的类名必须是编译时已知的类名,而不是类实例。List<MyClass> myListList<MyClass.class> myListClass c = MyList.class; List<c> myList

此外,泛型在运行时被擦除,因此添加这样的未知类型没有实际用处。

如果你加载的类有一些你在编译时知道的通用接口,你可以使用它。