Пользовательский тип данных с ограниченными возможностями в Java

Попытка создать настраиваемый (определяемый пользователем) тип данных, значение которого может быть только одним из нескольких вариантов, например, разными состояниями. Что-то вроде:
trafficLight = [ "red" | "amber" | "green" ];
или
coin = [0.01 | 0.02 | 0.05 | 0.1 | 0.2 | 0.5 | 1 | 2];

В этих примерах я предполагаю, что trafficLight — это просто String с ограниченными возможностями, и аналогично coin и int.

Я думаю, что мне нужно классифицировать эти новые типы данных, но как мне ограничить возможные значения, присвоенные переменным этих пользовательских типов данных?


person kcarew98    schedule 26.03.2018    source источник


Ответы (2)


Как насчет использования enum. Ниже приведен пример того, как это можно использовать. Используя enum в качестве параметра ваших методов, вы ограничиваете значения только теми значениями, которые допускает перечисление.

public class MyNewType {

    public void someMethod(TrafficLight tl, Coin coin) {
        //do something
    }

    public static enum TrafficLight {
        red, amber, green;
    }

    public static enum Coin {
        oneCent(.01f), twoCent(.02f), fiveCent(.05f), tenCent(.1f), fiftyCent(.5f), oneDollar(1f), twoDollar(2f);

        private Coin(float amount) {
            this.amount = amount;
        }
        float amount;

    }

}
person Jose Martinez    schedule 26.03.2018

Вы можете использовать перечисление

public enum TrafficLight {
    RED, AMBER, GREEN;
}

согласно https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

Поскольку перечисление не является ни String, ни int, вам придется сопоставить его с желаемым типом, и это можно сделать несколькими способами, например. путем вызова существующего String toString() или определения пользовательского метода int getValue().

person Karol Dowbecki    schedule 26.03.2018