Обновление: нет хорошего способа принудительно установить значение от 1 до 4 (возможно, сработает некоторое настраиваемое сложное время компиляции аннотация , но я сомневаюсь в этом), как было указано. Это всего лишь один из способов запретить создание экземпляра Card
без использования перечислений, и он неявно поддерживает value
между 1 и 4, поскольку каждый подкласс устанавливает свое собственное значение.
Односторонний было бы сделать Card
абстрактным (также можно использовать интерфейс):
public abstract class Card {
// should be 1 to 4
protected int value;
public int getValue() {
return value;
}
}
Затем создать дочерние классы для каждого типа:
public class Spade extends Card {
public Spade() {
this.value = 1;
}
}
public class Heart extends Card {
public Spade() {
this.value = 2;
}
}
Это вызовет ошибку времени компиляции, если кто-то пытался создать Card
напрямую:
Card c = new Card();
До того, как существовали перечисления, большинство кода Java обрабатывало перечисления именно так: с использованием предустановленного списка целых чисел, которые были очень подвержены ошибкам и не могли быть легко реализованы. Было мрачное время, давайте не будем go назад :)