Рассматривая Enum как обычное свойство в классе - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть класс, состоящий из нескольких свойств, одним из которых является enum:

public class Car {

    private String manufacturer;
    private int power;

    public enum Color {
        RED("red"),
        BLUE("blue"),
        GREEN("green");

        private final String value;

        Color(final String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    public String getManufacturer() {
        return manufacturer;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }

    public int getPower() {
        return power;
    }

    public void setPower(int power) {
        this.power = power;
    }

    public Car(String manufacturer, int power, Color color) {
        this.manufacturer = manufacturer;
        this.power = power;
//        Color(color); // Calling constructor, but --> ERROR: cannot find symbol
    }

    @Override
    public String toString() {
        return "Car{" + "manufacturer=" + manufacturer + ", power=" + power + '}'; // TODO add color
    }

}

Я помещаю этот класс в список и заполняю его некоторыми значениями:

List<Car>  car = Arrays.asList(
          new Car("Mazda", 95, Car.Color.BLUE),
          new Car("Toyota", 110, Car.Color.RED),
          new Car("Honda", 85, Car.Color.GREEN)
  );

Хочу, чтобы я хотел использовать этот класс как обычный DTO с его геттерами и сеттерами:

System.out.println(car.get(0));

Но в моем случае я получаю только:

Car{manufacturer=Mazda, power=95}

Таким образом, атрибут color отсутствует.

Как я могу использовать тип enum как обычное свойство моего класса?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Вы можете использовать тип enum, как и любой другой тип в Java.Просто попробуйте:

private String manufacturer;
private int power;
private Color color;  // here is the property of enum type

....

public Car(String manufacturer, int power, Color color) {
    this.manufacturer = manufacturer;
    this.power = power;
    this.color = color;
}

Car newCar = new Car("manufacturer", 150, Color.RED);
0 голосов
/ 26 апреля 2019

Лично я бы имел enum в своем собственном файле (только для удобства чтения) и имел бы enum в качестве переменной-члена в вашем классе.

затем в вашем файле enum поместите функцию toString, такую ​​как

   public String toString()
   {
        String returnValue = "";

        switch (this)
        {
           case RED:
            returnValue = "Red";
            break;
           case BLUE:
            returnValue = "Blue";
            break;
        }

        return returnValue;
    }

Затем в вашем toString для автомобиля выполните:

return "Car{" + "manufacturer=" + manufacturer + ", power=" + power + " Colour = " + colour.toString() + "}";

, когда цвет был переменной-членом перечисления в этом классе.

...