javagenericsobj instanceof T

有没有办法确定一个对象是一个genericstypes的实例?

if(obj instanceof T){...} 

这显然不起作用。 有其他select吗? 就像我想用javareflection来实例化一个类,然后检查以确保它是types的通用T.

你可以做这个检查的唯一方法是如果你有Class对象表示types:

 Class<T> type; //maybe passed into the method if ( type.isInstance(obj) ) { //... } 

为了延伸马克·彼得斯的样本,你经常想要做一些事情:

 Class<T> type; //maybe passed to the method if ( type.isInstance(obj) ) { T t = type.cast(obj); // ... } 

你可以试试这个,

 // 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.... } 

将限制放在typesT用于参数化Classtypes的地方会更有意义。 当你传入types时,而不是像Class<?> ,你应该使用Class<? extends T> Class<? extends T>

如果你有一个types为T的对象,这将只能工作(部分)。然后你可以得到这个对象的类,参见java.lang.Class<T>并且找出它是否与所讨论的对象相同。

但是请注意,这与我们有genrics的原因相反:使用genericstypes是一种说法,你不关心它的真实types(可以指定的上限和下限)。