假设我有一个字符串" Bar“,我想知道Bar是否是一个有效的对象,以及"Bar”是否扩展了"Foo“。我会使用Java反射吗?还是有更好的方法,比如数据库?我该怎么做呢?
干杯
发布于 2009-12-29 14:56:23
如果你不知道包--只知道类名,你可以尝试一下,使用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);发布于 2009-12-29 14:57:04
是的,反射就是答案:
Class barClass = Class.forName("some.package.Bar"); // will throw a ClassNotFoundException if Bar is not a valid class name
Class fooClass = some.package.Foo.class;
assert fooClass.isAssignableFrom(barClass); // true means Bar extends (or implements) Foohttps://stackoverflow.com/questions/1973238
复制相似问题