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都有一个同名的类。