我有一个xml文件,其中包含我想解析并读入程序的数据,因此我可以实例化一个类。

问题是,要实例化哪个类,直到运行时才知道。

我的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();
        }
}


实际上,工厂可以提供很多潜在的机会。有没有一种方法可以不必在可能的每个类上使用条件语句就获得这种行为?如果不是,我的想法是正确的还是有更好的方法呢?

最佳答案

public class FooBarFactory {
  FooBarInterface makeInstance(String s) {
    return Class.forName(s).newInstance();
  }
}


我没有显示它,但是您将需要处理一些已检查的异常,例如ClassNotFoundExceptionIllegalAccessExceptionInstantiationException

10-07 15:08