Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java反射检查可从类元数据分配_Java_Reflection - Fatal编程技术网

Java反射检查可从类元数据分配

Java反射检查可从类元数据分配,java,reflection,Java,Reflection,好的-我正在浏览一个资源树,寻找扩展特定超类的类,可能不是直接的-我有可以工作的代码,但我必须解析一个具体的类,我只是想知道在不解析类的情况下是否可以做同样的事情-这是我的工作函数: private static <T> boolean checkInherits(Class<T> superClass, ClassMetadata classInformation) { try { Class<?> theClass = C

好的-我正在浏览一个资源树,寻找扩展特定超类的类,可能不是直接的-我有可以工作的代码,但我必须解析一个具体的类,我只是想知道在不解析类的情况下是否可以做同样的事情-这是我的工作函数:

 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 theClass=Class.forName(classInformation.getClassName());
返回超类。isAssignableFrom(类);
}
捕获(丢弃例外)
{
返回false;
}
}
那么-不使用class.forName()可以做到这一点吗?直接从类元数据开始

没有办法。(非
final
)类
Foo
无法“知道”其所有(直接或间接)子类,因为任何人都可以创建扩展
Foo
的类。因此,只有同时拥有
Class
对象,才能了解子类关系


假设
ClassMetadata
来自Spring框架(),您可以使用
.getSuperClassName()
来获取超类的
字符串
表示形式,但是如果子类关系不是直接的,这将无法解决您的问题。从
ClassMetadata
获取
Class
对象的唯一方法是使用
Class.forName(classInformation.getClassName())
,就像您已经做的那样。

什么是
ClassMetadata
?它来自哪个库(不是标准API)?有很多API都有一个同名的类。