質問

Javaでは、クラスが特定のサブクラスのセットを持ち、他のクラスを持たないようにすることは可能ですか?例:

public abstract class A {}
public final class B extends A {}
public final class C extends A {}
public final class D extends A {}

何らかの方法でAの他のサブクラスを作成できないように強制できますか?

役に立ちましたか?

解決 4

救助のための教会エンコーディング:

public abstract class A {
  public abstract <R> R fold(R b, R c, R d);
}

可能な実装は3つのみです。

public final class B extends A {
  public <R> R fold(R b, R c, R d) {
    return b;
  }
}

public final class C extends A {
  public <R> R fold(R b, R c, R d) {
    return c;
  }
}

public final class D extends A {
  public <R> R fold(R b, R c, R d) {
    return d;
  }
}

他のヒント

クラス A をパッケージレベルのアクセシビリティを持つコンストラクターに渡します(他のコンストラクターはありません)。

Dave L.、他のコンストラクタがないことをありがとう。

おそらく列挙型が必要です(Java&gt; = 1.5)。列挙型には、一連の固定値を含めることができます。そして、クラスのすべての利点があります。フィールドとプロパティを持ち、インターフェースを実装することができます。列挙型は拡張できません。

例:

enum A {

  B,
  C,
  D;

  public int someField;

  public void someMethod() {
  }


}

クラスA、B、C、Dを個別のパッケージに入れ、クラスAを非公開にすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top