假设我有字符串“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/