存储对子变量的引用的基类?

时间:2016-10-05 21:38:58

标签: java java-ee

在基类中存储对子实例字段的引用是否有任何优势,而不是在基类中访问它时总是调用抽象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();
   }
}

1 个答案:

答案 0 :(得分:0)

关于PostConstruct的使用,我将引用您this question来详细说明该部分,但基本上结合依赖注入/多态方法,使用它来确保它是有意义的你有一个完全初始化的对象。

一般来说,我会说你建议的两种方法不相同,因为这些类有不同的行为。对于您的第二课,保证每次调用printText()时都会打印相同的文本,而对于您的第一个版本,每次都会有不同的文本,因为getText()的实现被委托给实施儿童班。因此第二个版本具有不变量,第一个版本没有。这是否是可取的是您需要在具体情况下评估的另一个问题。