Как уже упоминалось в комментариях, это в основном зависит от ваших требований.
Обычно хорошо иметь несколько свойств в перечислении, но они обычно должны быть постоянными и неизменными (val
типы в Kotlin, final
в Java) из-за того, что перечисления совместно используются виртуальной машиной Java.
Если вы посмотрите документацию из Oracle , вы увидите пример планет, где они определяют некоторые константы.
Если у вас в конечном итоге много констант, связанных с enum, вы можете пересмотреть, как вы структурируете свой код, и инкапсулировать связанные понятия в их собственные объекты, например
public enum Planet {
MERCURY(
new PhysicalProperties(3.303e+23, 2.4397e6),
new Information("Mercury", "foo")
),
VENUS(
new PhysicalProperties(4.869e+24, 6.0518e6),
new Information("Venus", "foo")
),
EARTH(
new PhysicalProperties(5.976e+24, 6.37814e6),
new Information("Earth", "Mostly Harmless")
),
MARS(
new PhysicalProperties(6.421e+23, 3.3972e6),
new Information("Mars", "foo")
),
JUPITER(
new PhysicalProperties(1.9e+27, 7.1492e7),
new Information("Jupiter", "foo")
),
SATURN(
new PhysicalProperties(5.688e+26, 6.0268e7),
new Information("Saturn", "foo")
),
URANUS(
new PhysicalProperties(8.686e+25, 2.5559e7),
new Information("Uranus", "foo")
),
NEPTUNE(
new PhysicalProperties(1.024e+26, 2.4746e7),
new Information("Neptune", "foo")
);
private final PhysicalProperties physicalProperties;
private final Information information;
Planet(
PhysicalProperties physicalProperties,
Information information
) {
this.physicalProperties = physicalProperties;
this.information = information;
}
public PhysicalProperties physicalProperties() {
return physicalProperties;
}
public Information information() {
return information;
}
public static final class PhysicalProperties {
private final double mass; // in kilograms
private final double radius; // in meters
// universal gravitational constant (m3 kg-1 s-2)
static final double G = 6.67300E-11;
PhysicalProperties(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
double surfaceGravity() {
return G * mass / (radius * radius);
}
double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
}
public static final class Information {
private final String name;
private final String description;
Information(String name, String description) {
this.name = name;
this.description = description;
}
}
// I have omitted some getters from these examples for shortness
}
Это немногонадуманного примера, поскольку существует только 4 константы, но вы можете представить себе ситуацию, в которой может быть много дополнительных констант.
Когда ваши перечисления раздуваются, вы должны также рассмотреть, должны ли они использовать перечисляемые типы или нет,особенно если вы добавите много дополнительных записей enum в качестве вашего проектат развивается.Например, чтобы добавить новую планету в приведенный выше пример, вам потребуется добавить новую запись enum и перекомпилировать, тогда как вы можете преобразовать enum в класс и создавать экземпляры произвольного количества на лету.