Domanda

È possibile, in Java, imporre che una classe abbia un insieme specifico di sottoclassi e nessun altro? Ad esempio:

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

Posso in qualche modo imporre che non possano mai essere create altre sottoclassi di A?

È stato utile?

Soluzione 4

Codifica della chiesa in soccorso:

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

Sono possibili solo tre implementazioni:

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

Altri suggerimenti

Dai alla classe A un costruttore con accessibilità a livello di pacchetto (e nessun altro costruttore).

Grazie, Dave L., per la parte relativa a nessun altro costruttore.

Probabilmente vuoi un enum (Java > = 1.5). Un tipo enum può avere un set di valori fissi. E ha tutti i vantaggi di una classe: possono avere campi e proprietà e possono farli implementare un'interfaccia. Un enum non può essere esteso.

Esempio:

enum A {

  B,
  C,
  D;

  public int someField;

  public void someMethod() {
  }


}

Puoi mettere la classe A, B, C, D in un pacchetto separato e rendere la classe A non pubblica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top