好的-我正在资源树中寻找扩展特定超级类的类,可能不是直接扩展的-我有可以工作的代码,但是我必须解析一个具体的类,我只是想知道是否存在相同的问题无需实际解析类就可以实现-这是我的工作功能:
private static <T> boolean checkInherits(Class<T> superClass, ClassMetadata classInformation)
{
try
{
Class<?> theClass = Class.forName(classInformation.getClassName());
return superClass.isAssignableFrom( theClass );
}
catch (Throwable theException)
{
return false;
}
}
所以-是否可以在不使用class.forName()的情况下做到这一点?即直接从类元数据?
最佳答案
不可能。 (非final
)类Foo
无法“了解”其所有(直接或间接)子类,因为任何人都可以创建扩展Foo
的类。因此,只有同时拥有两个Class
对象,您才能了解子类关系。
假设ClassMetadata
来自Spring框架(javadoc),则可以使用.getSuperClassName()
获取超类的String
表示形式,但是如果子类关系不是直接的,则无法解决您的问题。从Class
获取ClassMetadata
对象的唯一方法是使用Class.forName(classInformation.getClassName())
,就像您已经做过的一样。