Должен ли я создать Enum или Class, если тип в Enum используется только один раз - PullRequest
0 голосов
/ 22 февраля 2020

В Java, Хотите знать, какое решение является лучшей практикой и производительностью кодирования?

Так что, если я создал следующий enum, но для каждого типа Enum, он будет использоваться только для один раз .

public enum DifferType{
    TypeA("TypeA", True, "Monthly", False),
    TypeB("TypeB", False, "Daily",True),
    TypeC("TypeC", True, "Yearly",False),
    TypeD("TypeD", False, "Monthly",True)
    TypeE("TypeE", True, "Yearly",False),
    TypeF("TypeF", False, "Monthly",True),
    TypeG("TypeG", True, "Yearly",False),
    TypeH("TypeH", False, "Monthly",True)
    }

Или подкласс, может создать новый объект и установить поле всякий раз, когда его использование?

   public class DifferType{

    public DifferType(String name, Boolean isDown, String frequency, String isLeft){
    this.name = name;
    this.isDown = down;
    this.frequency = frequency;
    this.isLeft = isLeft;
    }

}
DifferType TypeA = new DifferType("TypeA", True, "Monthly", False);
 DifferType TypeB = new DifferType("TypeB", False, "Daily",True)
.....etc

1 Ответ

1 голос
/ 22 февраля 2020

Они служат разным целям. enum - это (обычно), когда вы можете перечислить (отсюда и название) всех возможных или значимых значений для некоторых Object. Так что если TypeA ... TypeH покрывает все возможных значений, то enum является лучшим. Если вы просто предоставляете некоторые примеры или часто используемые примеры, тогда классом является , вероятно , лучший вариант *.

Количество применений не должно рассматриваться здесь (по крайней мере, в мое мнение). API меняются и меняются со временем, и вы можете обнаружить, что то, что вы использовали ранее только один раз, теперь используется повсеместно.


* Бывают случаи, когда комбинация enum и interface работает для таких случаев, как это тоже. Например:

interface ThingDoer {
    void doThing();
}

enum CommonThingDoers implements ThingDoer {
    _1() {
        @Override
        public void doThing() {}
    },
    _2() {
        @Override
        public void doThing() {}    
    } // etc...
}

, который допускает расширение, но также говорит: «Это все значения, которые я сейчас ожидаю , чтобы увидеть.

...