【发布时间】:2019-04-19 14:03:18
【问题描述】:
我正在研究 java 中的反射。 我知道这是一个常见问题,并且有很多关于它的文章,但我有点困惑,似乎无法为我想要实现的目标找到正确的解决方案。
我有:
public class ClassA {
private List<?> myList;
// getters, setters
}
“myList”将包含一个对象列表(DTO):
List<?> myList; // could be List<DTO1> or List<DTO2> ...
我正在尝试从另一个类中获取列表的类型:
public class ClassB {
public void myMethod() {
// get type of ClassA.getMyList()
}
}
当我尝试使用 getClass()、getType() 之类的东西时,我只能得到“ArrayList”... 尝试获取列表中元素的类会导致“LinkedHashMap”。
我真的很想通过为列表使用通配符类型来实现这一点。
那么有没有办法用最少的代码获取 myList 的类型?
编辑:
谢谢大家的回答。
只有一件事:myList 包含 LinkedHashMap 类型的元素,这在我的帖子中不是很清楚。
看来这真的做不到。每个LinkedHashMap 代表一个对象,但您不知道是哪一个。它们只是键 + 值的列表。
【问题讨论】:
-
你试过
ClassA.getMyList().get(0).getClass()?? -
你不能。类型擦除。
ClassA应该是通用的。class ClassA<T> { private List<T> myList; } -
@Michael 但如果你从
List中的任何元素执行getClass(),你会得到它,不是吗? -
@Paplusc 如果是
List<Object>怎么办?第一个元素可以是字符串,第二个可以是整数,第三个可以是 HashMap。获取第一个元素的类并不能告诉你太多。 -
@Michal 没错,我没想到这种可能性。
标签: java generics reflection wildcard