java - 通过反射构造对象时如何传递各种参数?

标签 java oop reflection

我有一种情况,我使用反射根据完全限定的类名在运行时创建对象。所有对象都扩展同一个抽象类,因此它们的一般类型在编译时已知,但具体实现由运行时提供的类名确定。

抽象类提供了一个名为 create 的静态方法,该方法采用类名和其他参数来构造具体对象。每个响应都有一个实际类型 A 和一个存储类型 S。实际类型是 Java 中数据的“正确”表示,存储类型是存储在数据库中的内容。例如。 A 可能是 Date 对象,S 可能是转换为 Long 以便存储在 SQLite 中的同一 Date 对象。

这是一个简化的表示:

public abstract class Response<A, S> {

    public Response(String clazz, Object value, boolean actual) {
        this.clazz = clazz;
        if (actual) {
           actualValue = (A) value;
        } else {
            actualValue = toActualValue((S) value);
        }
    }

    public static Response create(String clazz, Object value) {
        //create response by reflection
        return response;
    }
}

这一直工作正常,直到我现在必须处理这样一个事实:除了每个 Response 实现采用的两个参数之外,一些 Response 实现现在还需要采用其他参数。

这些附加参数不能通过 setter 方法传递,因为它们通常在从抽象 Response 构造函数中调用的包私有(private)方法 toActualValue() 中使用。

我考虑过使用 Builder 模式来处理可选参数,但随后我需要一种方法来确定哪些 Response 实现采用哪些参数 - 而且我想不出一种干净的方法来提供该信息。也许我的想法完全错误。任何有用的见解或建议将不胜感激。

最佳答案

您是否考虑过使用任意数量的参数?

public TestClass(String clazz, Object value, boolean actual, Object... parms) {
        this.clazz = clazz;
        if (actual) {
           actualValue = (A) value;
        } else {
            //actualValue = toActualValue((S) value, parms);
        }
    }

https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html

关于java - 通过反射构造对象时如何传递各种参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31834065/

相关文章:

java - 如何读取大文件中的第二列

java - fx :jar in NetBeans? 在哪里 - JavaFX

java - 我怎样才能让两个线程为我的应用程序工作

java - 设计自己的实现以提高代码可维护性

python - mypy:返回值类型不兼容

reflection - 如何使用 Kotlin 反射更改成员字段?

java - 使java代码适应所使用的jdk版本

PHP : 'use' inside of the class definition

ios - 插入一行新代码用于在运行时记录方法

java - 在 Java 中使用私有(private)默认构造函数对类进行子类化