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
用于参数化Class
types的地方会更有意义。 当你传入types时,而不是像Class<?>
,你应该使用Class<? extends T>
Class<? extends T>
。
如果你有一个types为T的对象,这将只能工作(部分)。然后你可以得到这个对象的类,参见java.lang.Class<T>
并且找出它是否与所讨论的对象相同。
但是请注意,这与我们有genrics的原因相反:使用genericstypes是一种说法,你不关心它的真实types(可以指定的上限和下限)。