我正在编写带有几个配置参数的设置例程(目前可以是int
,double
或String
)。为了避免长方法签名,我想创建一个数据结构来存储这些参数。主要的设置例程调用了几种方法/工厂,每个方法/工厂都有自己的一组必需参数,我只想将数据结构的相关部分传递给每个例程。
我最初的想法是使用某种类似于递归/树的字典结构,其中String
键可以与值或行为与顶层树完全相同的子树相关联。
下面是我要尝试做的一个粗略示例:
public class A {
// some common methods here
}
public class A1 extends A {
public A1(int x, double y) {
// do stuff
}
}
public class A2 extends A {
public A2(double z) {
// do stuff
}
}
public A SetupA(ConfigOptions opts) {
if (opts.get("typeA").equals("A1")) {
return SetupA1(opts.get("A1opts"));
} else {
return SetupA2(opts.get("A2opts"));
}
}
public A1 SetupA1(ConfigOptions A1opts) {
return new A1(A1opts.get("x"), A1opts.get("y"));
}
public A2 SetupA2(ConfigOptions A2opts) {
return new A2(A2opts.get("z"));
}
当我填写ConfigOptions
结构时,我想要一个字符,例如:
,用于分隔树的各个级别。即对于上面的示例,我可以指定我想要一个A2
对象,z = 1.0
像这样:
opts.set("typeA", "A2");
opts.set("A2opts:z", 1.0);
我知道我刚刚布置的内容无法正常工作,因为它不是类型安全的。对接口的哪些修改和/或我认为可以实现我的目标的实现技术是什么?
注释: