Есть ли способ реализовать алгебраические типы в Java? - PullRequest
6 голосов
/ 04 октября 2008

Возможно ли в Java обеспечить, чтобы у класса был определенный набор подклассов, а других нет? Например:

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

Могу ли я каким-то образом обеспечить, чтобы никакие другие подклассы A не могли быть созданы?

Ответы [ 3 ]

4 голосов
/ 04 октября 2008

Дайте классу A конструктор с доступом на уровне пакета (и без других конструкторов).

Спасибо, Дейв Л., за немного о других конструкторах.

3 голосов
/ 04 октября 2008

Возможно, вы хотите перечисление (Java> = 1.5). Тип enum может иметь набор фиксированных значений. И у него есть все плюсы класса: они могут иметь поля и свойства и могут заставить их реализовать интерфейс. Перечисление не может быть расширено.

Пример:

enum A {

  B,
  C,
  D;

  public int someField;

  public void someMethod() {
  }


}
0 голосов
/ 04 октября 2008

Вы можете поместить класс A, B, C, D в отдельный пакет и сделать класс A не общедоступным.

...