有没有办法确定对象是否是泛型类型的实例?
public <T> test(Object obj) {
if (obj instanceof T) {
...
}
}
这显然行不通。有其他选择吗?就像我想使用Java反射来实例化一个类,然后检查以确保它是通用类型T
。
Answers:
进行此检查的唯一方法是,是否具有Class
表示类型的对象:
Class<T> type; //maybe passed into the method
if ( type.isInstance(obj) ) {
//...
}
Class<T> type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
如果您不想像Mark Peters那样将Class类型作为参数传递,则可以使用以下代码。感谢David O'Meara。
Class<T> type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
if (type.isInstance(obj)) {
...
}
Type safety: Unchecked cast from Type to Class<T>
type
作为方法参数获取,则可能要对其进行初始化:Class type = ((T) new Object()).getClass();