在基类中存储对子实例字段的引用是否有任何优势,而不是在基类中访问它时总是调用抽象getter?
假设我有一个如下所示的基类:
public abstract class BaseClass {
abstract String getText();
public void printText() {
System.out.println(getText());
}
}
和下面的子类一样,getText()返回一个永不改变的字段。
public ChildClass extends BaseClass {
private String text = "blah";
@Override
public String getText() {
return text;
}
}
转换到下面是否有任何优势/劣势?
public abstract class BaseClass {
abstract String getText();
private String text;
public void printText() {
System.out.println(text);
}
@PostConstruct
public void postConstruct() {
this.text = getText();
}
}
答案 0 :(得分:0)
关于PostConstruct
的使用,我将引用您this question来详细说明该部分,但基本上结合依赖注入/多态方法,使用它来确保它是有意义的你有一个完全初始化的对象。
一般来说,我会说你建议的两种方法不相同,因为这些类有不同的行为。对于您的第二课,保证每次调用printText()
时都会打印相同的文本,而对于您的第一个版本,每次都会有不同的文本,因为getText()
的实现被委托给实施儿童班。因此第二个版本具有不变量,第一个版本没有。这是否是可取的是您需要在具体情况下评估的另一个问题。