我有一个必须用参数构造的基类。在子类中,我需要在构造基类之前准备这个参数,但是在Java中必须先调用super。处理这种情况的最佳方法是什么(见下面的简单示例)。
class BaseClass {
protected String preparedParam;
public BaseClass(String preparedParam) {
this.param = param;
}
}
class ChildClass {
public ChildClass (Map<String, Object> params) {
// need to work with params and prepare param for super constructor
super(param);
}
}
答案 0 :(得分:11)
您可以创建一个 静态 方法,进行转换并调用它。
class ChildClass {
static String preprocessParams(Map<String, Object> params) {
...
return someString;
}
public BaseClass(Map<String, Object> params) {
super(preprocessParams(params));
}
}
答案 1 :(得分:5)
这是一种方法:
class ChildClass {
public ChildClass(Map<String, Object> params) {
super(process(params));
}
private static String process(Map<String, Object> params) {
// work with params here to prepare param for super constructor
}
}
答案 2 :(得分:2)
因为许多必须准备/初始化的参数对我来说是简单的factory method更好的解决方案。在我看来,这是一个更清晰的解决方案。无论如何,谢谢大家的答案。
class BaseClass {
protected Object preparedParam;
public BaseClass(Object preparedParam) {
this.preparedParam = preparedParam;
}
}
class ChildClass extends BaseClass {
private ChildClass(Object preparedParam) {
super(preparedParam);
}
public static ChildClass createChildClass(Map<String, Object> params) {
Object param1 = params.get("param1");
// prepare params here
ChildClass result = new ChildClass(param1);
// do other stuff
return result;
}
}
答案 3 :(得分:0)
到目前为止,我认为罗曼的回答是最好的。 如果父类提供了默认构造函数,则可以实例化一个super对象,然后使用setter方法。