Existe uma maneira de implementar tipos algébricos em Java?
-
05-07-2019 - |
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?
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.