我有一个抽象类,只有一个抽象方法;和一些实施类(约6)。
该方法返回一个“需要”两个参数的对象。
但是,在某些情况下,只需要两个参数中的一个。
有没有一种优雅的方式来实现这种情况? (而不是将此参数返回为空)
public class NormResult {
protected List<String> normWords;
protected List<String> unNormWords;
public NormResult(List<String> normWords,List<String> unNormWords) {
this.normWords = normWords;
this.unNormWords = unNormWords;
}
public NormResult(List<String> normWords) {
this.normWords = normWords;
this.unNormWords = Collections.emptyList();
}
}
public abstract class AbstractNormalizer {
protected abstract List<NormResult> doNorm();
}
public class FirstNormImpl extends AbstractNormalizer {
protected List<NormResult> doNorm() {
List<String> normWords = new ArrayList<>(5);
List<String> unNormWords = new ArrayList<>(7);
NormResult result = new NormResult(normWords, unNormWords);
return result;
}
}
public class SecondNormImpl extends AbstractNormalizer {
protected List<NormResult> doNorm() {
List<String> normWords = new ArrayList<>(8);
NormResult result = new NormResult(normWords);
return result;
}
}
答案 0 :(得分:2)
如果你对成员决赛这样做:
protected final List<String> normWords;
protected final List<String> unNormWords;
然后在构造函数中你必须初始化它们...然后你可以设置为空集合或空引用你没有/需要的那个
并且重载的构造函数可能如下所示:
public NormResult(List<String> normWords, List<String> unNormWords) {
this.normWords = normWords;
this.unNormWords = unNormWords;
}
public NormResult(List<String> normWords) {
this(normWords, Collections.emptyList());
}
答案 1 :(得分:2)
我要做的两个改变:
如:
public NormResult(List<String> normWords) {
this(normWords(), Collections.emptyList());
}
以避免两次分配值的简单“代码重复”。
除此之外;我同意这些意见;这种方法看起来很合理。