gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:36 26 4
gpt4 key购买 nike

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

抽象类提供了一个名为 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/

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