gpt4 book ai didi

java - 根据运行时配置文本创建不同的 Java 类

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:11:45 25 4
gpt4 key购买 nike

我有一个套件可以运行一些具有不同参数的操作。操作及其参数在 XML 配置文件中提供。

每个操作都有一个单独的类来实现。所有这些类都扩展了一个抽象的 Operation 类,所以一旦创建了类,就可以在代码中以相同的方式处理它,无论实际操作是什么。

但是,我确实需要创建类。到目前为止,我看到了两种方法:

  • 一个 switch 语句:

    Operation operation;
    switch (operationName) {
    case "OperationA":
    operation = new OperationA();
    break;
    case "OperationB":
    operation = new OperationB();
    break;
    default:
    log.error("Invalid operation name: " + operationName);
    return true;
    }
  • 类名的运行时查找。我从未测试过这个选项,但它似乎是这样的:

    Operation operation = (Operation)Class.forName(operationName).newinstance();

第一个选项似乎很笨拙。第二个选项似乎过于信任配置,但我不确定这一点。

也许我应该只验证 operationName 是包含我所有操作的预定义集或列表的成员(或者在 XML 模式中设置可能的值并根据它验证配置),然后使用第二个选项?或者有更好的东西吗?

最佳答案

我更愿意使用第二个选项。

一个示例类。 (注意默认构造函数是必需的,因为它是由.newInstance()调用的。如果你想创建一个新的类并使用带参数的构造函数,你也可以引用这个问题:Can I use Class.newInstance() with constructor arguments?。)

package com.mypackage;

public class SomeObject {

public SomeObject() {}
}

如何创建该类的实例:

try {
// you need to use the fully qualified name, not just the class name
SomeObject object = (SomeObject) Class.forName("com.mypackage.SomeObject").newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
// here you can handle incorrect config in your XML file
}

您还可以在另一个配置文件或属性中有一个限定名称列表,并在尝试创建类之前检查该列表。

关于java - 根据运行时配置文本创建不同的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43690524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com