java - Java中基于外部xml的运行时类实例化

标签 java reflection dependency-injection xml-parsing factory

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

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

我的 xml 将有点​​像下面这样。

<dataitem class="FooClass">
<dataitem class="BarClass">

类将共享一个公共(public)接口(interface)。 目前,我让 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

关于java - Java中基于外部xml的运行时类实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28271362/

相关文章:

java - byte[] 作为 Rest Web 服务的输入

c# - 自定义属性可以查询其附加的属性的值吗?

node.js - 其他服务中的 @Inject 服务 - Nest 无法解析依赖项

delphi - 如何将参数从实例化器传递到 spring4d 依赖注入(inject)框架中的构造函数?

Java8 Stream List<Map<String,Object>> 分组依据和计数值

java - SDKMAN 安装 Java 和 Maven 时出现问题。 JAVA_HOME环境变量定义不正确

c# - 有没有一种方法可以使用 C# 使用特殊文件夹名称作为字符串来访问特殊文件夹路径

.net - 如何使用反射判断类/方法是否可访问?

constructor - 干净的代码 - 依赖注入(inject)

java - 写入同一文件时线程偶尔会阻塞