我有一个表单界面:
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<?> myList
说 List<Object> myList
甚至更旧的款式:List myList
.后者会给你编译器警告,这是泛型帮助之前的风格。我不能完全理解你想做什么。您基本上是尝试在运行时确定泛型的类型吗?
引入泛型是为了让您能够进行编译类型错误检查。除非有充分的理由,否则尽量避免泛型(我只能想到,如果你构建一些缓存框架,你真的必须处理所有事情,我已经看到了)。尝试在您将尝试处理/存储的对象中找到最常见的基类。
关于java - 在 Java 中从泛型类型创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799686/