繁体   English   中英

从Java中的泛型类型创建列表

[英]Creating a list from generic type in Java

我有一个表格的界面:

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

客户端将实现此接口,然后将.class文件传递给它们的子类。 然后我按以下方式从界面解析出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!
}

我正在尝试基于其接口中声明的泛型类型来实例化列表。 在java中执行此操作的正确方法是什么? 这可能吗? 我正在采取的方式似乎不起作用。

而不是List<?> myListList<Object> myList甚至更旧的样式: List myList 后者会给你编译器警告,这是仿制药帮助之前的风格。 我不能完全理解你想做什么。 您是否基本上尝试在运行时确定泛型的类型? 引入了泛型,因此您可以进行编译类型错误检查。 除非有一个非常好的理由,否则请尽量避免使用泛型(我只能想到如果你构建了一些缓存框架,你必须处理所有内容,我已经看过了)。 尝试在这些对象中找到最常见的分母基类,然后尝试处理/存储。

在你的情况下,这可能的。 但是,从语法上讲,创建ArrayList的方式是非法的,因为必须在编译时知道泛型类型参数。 使用new ArrayList<Object> (在构造函数调用和声明中)。

我不认为在Java中使用动态值,例如示例中的genericTypes [1]。 Java中的泛型基本上是语法糖,它在编译时应用。 大多数情况下,类型信息在运行时被擦除。 Java教程中提供了一些其他信息, 网址http://docs.oracle.com/javase/tutorial/java/generics/erasure.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM