Is there a way to implement algebraic types in Java?

Is it possible, in Java, to ensure that a class has a specific set of subclasses and others? For example:

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

Is there any way to ensure that no other subclasses of A can be created?

+7
java class abstract-class final adts
source share
4 answers

Church coding for help:

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

Only three implementations are possible:

 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; } } 
0
source share

Give class A constructor with package-level accessibility (and no other constructors).

Thanks, Dave L., for a bit about any other constructors.

+4
source share

You probably want to list (Java> = 1.5). An enumeration type can have a set of fixed values. And it has all the advantages of a class: they can have fields and properties and can make them implement the interface. Enumeration cannot be extended.

Example:

 enum A { B, C, D; public int someField; public void someMethod() { } } 
+3
source share

You can put classes A, B, C, D in a separate package and make class A not public.

0
source share

All Articles