世界!我需要从其类的名称实例化一个对象.我知道这样可以做到
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();
}
问题是我的班级名称不完全合格.有一种只知道短名称就可以得到全名的方法吗?
解决方法:
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(…)或等效名称之前.