保護されている多くのメソッド (30 以上) を持つクラス (カプセル) があります。アイデアは、開発者がこのクラスを拡張し、クラス内で保護されたメソッドを使用できるようにすることです (ImADev) が、それらをパブリックとして公開することは開発者に任せます (必要に応じてメソッドをオーバーライドします)。
これらのオブジェクトをいくつかのユーティリティ クラス/メソッドに渡し、保護されたメソッドにアクセスできるようにするユース ケースがあります。保護されていることを除いて、ユーティリティ クラス/サービスはそれらを見ることができません。
以下の例を参照してください。
// My Capsule class with protected methods
public abstract class Capsule {
public Capsule(..) { .. }
protected String getFoo() { return "foo"; }
}
// How a dev should use the class
public class ImADev extends Capsule {
public ImADev(..) { super(..); }
public String getBar() { this.getFoo() + "BAR");
}
// A special utility class
// Helper.helper() can accept any class derived from Capsule
public class Helper {
public String helper(Capsule c) {
return " im doing something awesome with " + c.getFoo();
// Except i cant do this, because c.getFoo() is protected.
}
}
これを回避する最善の方法は何ですか? 保護されたメソッドがたくさんあることに注意してください。