运行-time class实例化基于外部xml in Java
Run-time class instantiation based on external xml in Java
我有一个 xml 文件,其中包含我要解析并读入我的程序的数据,因此我可以实例化一个 class。
问题是,class 我想实例化哪个直到运行时才知道。
我的xml会有点像下面这样。
<dataitem class="FooClass">
<dataitem class="BarClass">
类 将共享一个公共界面。
目前我让 Factory 做类似下面的事情。
public class FooBarFactory {
FooBarInterface makeClass(String s){
if(s.equals("FooClass")){
return new FooClass();
}
if(s.equals("BarClass")){
return new BarClass();
}
}
实际上,工厂 return 有很多潜力 classes。有没有一种方法可以获得这种行为,而不必为每个可能的 class 使用条件语句?如果不是,我的想法是否正确,或者有更好的方法吗?
public class FooBarFactory {
FooBarInterface makeInstance(String s) {
return Class.forName(s).newInstance();
}
}
我没有显示它,但你需要处理一些已检查的异常,例如 ClassNotFoundException
、IllegalAccessException
和 InstantiationException
。
我有一个 xml 文件,其中包含我要解析并读入我的程序的数据,因此我可以实例化一个 class。
问题是,class 我想实例化哪个直到运行时才知道。
我的xml会有点像下面这样。
<dataitem class="FooClass">
<dataitem class="BarClass">
类 将共享一个公共界面。 目前我让 Factory 做类似下面的事情。
public class FooBarFactory {
FooBarInterface makeClass(String s){
if(s.equals("FooClass")){
return new FooClass();
}
if(s.equals("BarClass")){
return new BarClass();
}
}
实际上,工厂 return 有很多潜力 classes。有没有一种方法可以获得这种行为,而不必为每个可能的 class 使用条件语句?如果不是,我的想法是否正确,或者有更好的方法吗?
public class FooBarFactory {
FooBarInterface makeInstance(String s) {
return Class.forName(s).newInstance();
}
}
我没有显示它,但你需要处理一些已检查的异常,例如 ClassNotFoundException
、IllegalAccessException
和 InstantiationException
。