Nik*_*ris 77 java generics instanceof
有没有办法确定对象是否是泛型类型的实例?
public <T> test(Object obj) {
if (obj instanceof T) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
这显然不起作用.还有其他选择吗?就像我想使用Java反射来实例化一个类然后检查以确保它是通用类型T.
Mar*_*ers 117
您可以执行此检查的唯一方法是,如果您具有Class表示类型的对象:
Class<T> type; //maybe passed into the method
if ( type.isInstance(obj) ) {
//...
}
Run Code Online (Sandbox Code Playgroud)
Puc*_*uce 18
要扩展Mark Peters的样本,通常您需要执行以下操作:
Class<T> type; //maybe passed to the method
if ( type.isInstance(obj) ) {
T t = type.cast(obj);
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您不想像Mark Peters那样将Class类型作为参数传递,则可以使用以下代码。感谢David O'Meara。
Class<T> type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
if (type.isInstance(obj)) {
...
}
Run Code Online (Sandbox Code Playgroud)
你可以试试这个,
// Cast your object to the generic type.
T data = null;
try {
data = (T) obj;
} catch (ClassCastException cce) {
// Log the error.
}
// Check if the cast completed successfully.
if(data != null) {
// whatever....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60779 次 |
| 最近记录: |