Test if object is instanceof a parameter type
是否可以确定对象是否为泛型类型的实例?
1 2 3 4 5 |
那显然是行不通的。有其他选择吗?就像我想使用Java反射实例化一个类,然后检查以确保其类型为通用
执行此检查的唯一方法是,如果您具有表示类型的
1 2 3 4 | Class< T > type; //maybe passed into the method if ( type.isInstance(obj) ) { //... } |
要扩展Mark Peters的示例,通常您需要执行以下操作:
1 2 3 4 5 | Class< T > type; //maybe passed to the method if ( type.isInstance(obj) ) { T t = type.cast(obj); // ... } |
如果您不想像Mark Peters所述将Class类型作为参数传递,则可以使用以下代码。大卫·奥米拉(David O'Meara)表示敬意。
1 2 3 4 5 | Class< T > type = (Class< T >) ((ParameterizedType) getClass().getGenericSuperclass()) .getActualTypeArguments()[0]; if (type.isInstance(obj)) { ... } |
您可以尝试一下,
1 2 3 4 5 6 7 8 9 10 11 12 | // 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.... } |
对类型
这仅在(如果有)类型为T的对象时才起作用。然后,您可以获取该对象的类,请参见
但是请注意,这与我们具有泛型的原因恰恰相反:使用泛型类型是一种方式,您不必关心它实际上是什么类型(可以指定上限和下限)。铅>