Pergunta

É possível, em Java, para impor que uma classe tem um conjunto específico de subclasses e não outros? Por exemplo:

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

Can I alguma forma impor que há outras subclasses de A podem jamais ser criado?

Foi útil?

Solução 4

Igreja a codificação para o resgate:

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

Existem apenas três implementações possíveis:

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

Outras dicas

Dê classe A um construtor com Acessibilidade de nível de pacote (e há outros construtores).

Obrigado, Dave L., para o pouco sobre há outros construtores.

Você provavelmente quer um enum (Java> = 1,5). Um tipo de enumeração pode ter um conjunto de valores fixos. E tem todas as guloseimas de uma classe: eles podem ter campos e propriedades, e pode fazê-los implementar uma interface. Um enum não pode ser estendida.

Exemplo:

enum A {

  B,
  C,
  D;

  public int someField;

  public void someMethod() {
  }


}

Você poderia colocar classe A, B, C, D em um pacote e classe make separar um não público.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top