From f20d786191ed5fba1829d29aebfec45cdf990e7c Mon Sep 17 00:00:00 2001 From: Marcus Adrian Date: Fri, 7 Aug 2020 22:10:40 +0200 Subject: [PATCH] self() in parent is sufficient --- .../chapter2/item2/hierarchicalbuilder/Calzone.java | 2 -- .../chapter2/item2/hierarchicalbuilder/NyPizza.java | 1 - .../chapter2/item2/hierarchicalbuilder/Pizza.java | 9 +++++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/effectivejava/chapter2/item2/hierarchicalbuilder/Calzone.java b/src/effectivejava/chapter2/item2/hierarchicalbuilder/Calzone.java index b26ab600..d622c1c8 100644 --- a/src/effectivejava/chapter2/item2/hierarchicalbuilder/Calzone.java +++ b/src/effectivejava/chapter2/item2/hierarchicalbuilder/Calzone.java @@ -15,8 +15,6 @@ public Builder sauceInside() { @Override public Calzone build() { return new Calzone(this); } - - @Override protected Builder self() { return this; } } private Calzone(Builder builder) { diff --git a/src/effectivejava/chapter2/item2/hierarchicalbuilder/NyPizza.java b/src/effectivejava/chapter2/item2/hierarchicalbuilder/NyPizza.java index 3e8c04f8..ab02117f 100644 --- a/src/effectivejava/chapter2/item2/hierarchicalbuilder/NyPizza.java +++ b/src/effectivejava/chapter2/item2/hierarchicalbuilder/NyPizza.java @@ -18,7 +18,6 @@ public Builder(Size size) { return new NyPizza(this); } - @Override protected Builder self() { return this; } } private NyPizza(Builder builder) { diff --git a/src/effectivejava/chapter2/item2/hierarchicalbuilder/Pizza.java b/src/effectivejava/chapter2/item2/hierarchicalbuilder/Pizza.java index 77925cda..910e6ee2 100644 --- a/src/effectivejava/chapter2/item2/hierarchicalbuilder/Pizza.java +++ b/src/effectivejava/chapter2/item2/hierarchicalbuilder/Pizza.java @@ -18,8 +18,13 @@ public T addTopping(Topping topping) { abstract Pizza build(); - // Subclasses must override this method to return "this" - protected abstract T self(); + @SuppressWarnings("unchecked") + protected T self() { + // this is always of type T + // so there is no need to override + // self in subclasses + return (T) this; + } } Pizza(Builder builder) {