Могу ли я переместить переопределенные методы в Enum в класс - PullRequest
1 голос
/ 16 апреля 2020

У меня есть Enum, у которого есть три константы на данный момент. Все три имеют более 10 переопределенных методов. Можно ли иметь лучший дизайн, чтобы я мог поместить их всех в общий класс.

Обновлено с примером кода:

public enum MyEnum {

    FIRST {
        @Override
        public String doIt() {
            return "1: " + someField; //error
        }
        @Override
        public String getCategory() {
            return "MyCategory1"; //error
        }
    },
    SECOND {
        @Override
        public String doIt() {
            return "2: " + someField; //error
        }
       @Override
        public String getCategory() {
            return "MyCategory2"; //error
        }
    },
    THIRD {
        @Override
        public String doIt() {
            return "3: " + someField; //error
        }
       @Override
        public String getCategory() {
            return "MyCategory3"; //error
        }
    };

    private String someField;

    public abstract String doIt();
    public abstract String getCategory();

}

Ответы [ 2 ]

3 голосов
/ 16 апреля 2020

Почему бы не попробовать это так:

public enum MyEnum{
    FIRST(1),
    SECOND(2),
    THIRD(3);

    private final int value;

    private MyEnum(int value) {
        this.value = value;
      }

    public String doIt() {
        return value + ": " + someField;
    }

    public String getCategory() {
        return "MyCategory" + value;
    }
}

Нет необходимости повторять какие-либо методы, не говоря уже о том, чтобы переопределить их.

0 голосов
/ 16 апреля 2020

Если вы хотите конкретно класс:

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class Category {

    public static final Category FIRST = new Category(1, "MyCategory1", "someField");
    public static final Category SECOND = new Category(2, "MyCategory2", "someField");
    public static final Category THIRD = new Category(3, "MyCategory3", "someField");

    private int categoryId;
    private String category;
    private String someField;

    public String doIt() {
        return this.categoryId +": " + this.someField;
    }


}

А затем просто используйте константы:

public class TestCategory {

    public static void main(String[] args) {
        System.out.println(FIRST.doIt());
        System.out.println(FIRST.getCategory());
    }

}
...