Frage

Ist es möglich, in Java, zu erzwingen, dass eine Klasse eine bestimmte Gruppe von Unterklassen und keine andere hat? Zum Beispiel:

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

Kann ich irgendwie erzwingen, dass keine andere Unterklassen von A können jemals geschaffen werden?

War es hilfreich?

Lösung 4

Kirche Codierung zur Rettung:

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

Es gibt nur drei Implementierungen möglich:

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;
  }
}

Andere Tipps

Geben Klasse A ein Konstruktor mit Paket-Level-Zugänglichkeit (und keine anderen Konstrukteuren).

Danke, Dave L., für die wenig über keine anderen Konstrukteuren.

Sie wollen wahrscheinlich eine ENUM (Java> = 1.5). Ein Aufzählungstyp kann eine Reihe von festen Werten hat. Und es hat alle guten Sachen einer Klasse: sie haben können Felder und Eigenschaften, und kann sie eine Schnittstelle machen implementieren. Ein ENUM kann nicht verlängert werden.

Beispiel:

enum A {

  B,
  C,
  D;

  public int someField;

  public void someMethod() {
  }


}

Sie könnten Klasse A setzen, B, C, D in einem separaten Paket und macht Klasse A nicht öffentlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top