好的-我正在资源树中寻找扩展特定超级类的类,可能不是直接扩展的-我有可以工作的代码,但是我必须解析一个具体的类,我只是想知道是否存在相同的问题无需实际解析类就可以实现-这是我的工作功能:

 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()),就像您已经做过的一样。

09-04 13:56