java - 在 Java 中从泛型类型创建列表

标签 java reflection

我有一个表单界面:

public interface Tester<K1, V1> {
    ...
}

客户端将实现此接口(interface),然后将其子类的 .class 文件传递​​给我。然后,我通过以下方式从接口(interface)中解析出 K1、V1:

// Assume only Tester<K1, V1> is implemented for now:
Type genericInterface = ClientClass.class.getGenericInterfaces()[0]; 
if(genericInterface instanceof ParameterizedType){
    Type[] genericTypes = ((ParameterizedType) genericInterface).getActualTypeArguments();
    List<?> myList = new ArrayList<genericTypes[1]>(); // THIS DOES NOT WORK!
}

我正在尝试根据在其接口(interface)中声明的泛型类型来实例化一个列表。在 Java 中执行此操作的正确方法是什么?这可能吗?我的做法似乎行不通。

最佳答案

而不是 List<?> myListList<Object> myList甚至更旧的款式:List myList .后者会给你编译器警告,这是泛型帮助之前的风格。我不能完全理解你想做什么。您基本上是尝试在运行时确定泛型的类型吗? 引入泛型是为了让您能够进行编译类型错误检查。除非有充分的理由,否则尽量避免泛型(我只能想到,如果你构建一些缓存框架,你真的必须处理所有事情,我已经看到了)。尝试在您将尝试处理/存储的对象中找到最常见的基类。

关于java - 在 Java 中从泛型类型创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799686/

相关文章:

python - 如何访问 Python 父类(super class)的属性,例如通过 __class__.__dict__?

java - 在java中将整数集转换为字符串

java - 监听器创建一个新线程(或其他东西)。如何在关闭 fragment 时杀死它?

java - 有没有一种简单的方法可以在 Eclipse 中导入黑白配色方案

c# - 如何使用反射访问显式实现的方法?

java - 当我试图知道我的方法中是否有注释时,它返回 null(即使有)

java - Selenium Instagram 关注者抛出陈旧元素引用

java - 使用 pdfbox 编辑 pdf 页面

c# - LINQ 到 SQL。在运行时更改表名

c# - 应用程序在运行时更改语言