世界!我需要从其类的名称实例化一个Object。我知道有可能这样做,
MyObject myObject = null;
try {
Constructor constructor = Class.forName( "fully.qualified.class.name" ).getConstructor(); // Get the constructor without parameters
myObject = (MyObject) constructor.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
问题是我班级的名字不是完全合格的。有没有办法通过只知道短名来获得完整的名字?
答案 0 :(得分:2)
MyObject myObject = null;
for (Package p : Package.getPackages()) {
try {
myObject = Class.forName(p.getName() + "." + className).newInstance();
break;
} catch (ClassNotFoundException ex) {
// ignore
}
}
Package.getPackages()
调用将为您提供当前类ClassLoader 及其祖先所知的每个包。
警告:这将是昂贵的,因为您反复抛出和捕获异常。可以通过测试加快速度:
this.getClass().getClassLoader().findResource(binaryClassName) != null
在致电Class.forName(...)
或等效。
答案 1 :(得分:1)
重复尝试使用包搜索路径。 ;)
String[] packages = ...;
String className = ...;
MyObject myObject = null;
for(String p : packages)
try {
myObject = Class.forName(p + '.' + className).newInstance();
break;
} catch (Exception ignored) {
}