java - 从外部检查 Java 对象层次结构

标签 java reflection

假设我有字符串“Bar”,我想知道 Bar 是否是有效对象,以及“Bar”是否扩展“Foo”。我会使用 Java 反射还是有更好的方法,比如数据库?我该怎么做?

干杯

最佳答案

如果您不知道包 - 仅知道类名,您可以使用 spring 框架尝试此操作:

List<Class> classes = new LinkedList<Class>();
PathMatchingResourcePatternResolver scanner = new 
    PathMatchingResourcePatternResolver();
// this should match the package and the class name. for example "*.Bar"
Resource[] resources = scanner.getResources(matchPattern); 

for (Resource resource : resources) {
    Class<?> clazz = getClassFromFileSystemResource(resource);
    classes.add(clazz);
}


public static Class getClassFromFileSystemResource(Resource resource) throws Exception {
    String resourceUri = resource.getURI().toString();
    // finding the fully qualified name of the class
    String classpathToResource = resourceUri.substring(resourceUri
            .indexOf("com"), resourceUri.indexOf(".class"));
    classpathToResource = classpathToResource.replace("/", ".");
    return Class.forName(classpathToResource);
}

上面的两个方法为您提供了名为“Bar”的类的列表(它们可能不止一个!)。

那就更容易了

expectedSuperclass.isAssignableFrom(yourClass);

关于java - 从外部检查 Java 对象层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1973238/

相关文章:

java - 我尝试使用 hibernate 连接到 MySql 工作台

java - Android万能音乐播放器在MediaItem ViewHolder中添加专辑封面

c++ - 如何从 C++ 运行 C++ 代码?

c# - 在 C# 中使用反射设置属性 {get;}

c++ - 一个对象能知道它自己的常量吗?

java - 如何处理父类(super class)构造函数中的所有子类成员?

c# - 如何使用反射调用具有通用返回类型的方法

java - android 的离线存储管理

java - Tomcat 7 解释异常

java - 在没有 FileReference 的 Flex 中上传