我有一个方法,它给我一个对象的类型:
public void decode(java.reflect.Type type){
//how to check if type extends MyAbstract.class?
}
如果类型扩展了我创建的抽象类MyAbstract,我需要进行强制转换。 我试过:
type instanceof MyAbstract
但似乎不起作用。。。你有什么想法吗?
首先,要澄清几点:
>
类型
实例不仅代表类。 它可以表示类,参数化类型以及类型参数本身。 它甚至可以表示通配符类型。 如果查看javadoc,您将看到以下已知的子接口:
GenericArrayType
,ParameterizedType
,TypeVariable
,WildcardType
instanceof
检查其左操作数是否是指定为其右操作数的类型的实例。 您的
type instanceof MyAbstract
因为它检查type
变量引用的对象是否是自定义MyAbstract
类型的实例。 您可能还没有实现一个也扩展了您的MyAbstract
的Type
子类(但您可能会让我吃惊)。
java.lang.class
类型也实现了type
。 如果这是您真正要检查的内容,那么您首先必须将其强制转换为class
,然后使用IsAssignableFrom
检查MyAbstract
是否是该类型的超类。
if (type instanceof Class) {
Class<?> clazz = (Class<?>) type;
if (MyAbstract.class.isAssignableFrom(clazz)) {
System.out.println(true);
}
}
如果您的类型
不是一个类
,您必须对它是什么进行推理。 如果它是一个ParameterizedType
,您可以使用它的GetRawType
方法来获取原始类型(但是您必须重复检查Class
)。 如果它是TypeVariable
,则可以使用getBounds()
检查它的边界。