Сколько переменных мы можем объявить в ENUM - PullRequest
0 голосов
/ 17 апреля 2019

Я объявляю enum следующим образом:

SUNDAY("Sunday","Week end","1",true)

В приведенном выше enum я объявил четыре переменные, лучше ли иметь больше переменных в enum?

Ответы [ 2 ]

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

Пул констант для класса или интерфейса ограничен 65535 записями 16-битным полем constant_pool_count структуры ClassFile.Это действует как внутреннее ограничение общей сложности одного класса или интерфейса.

1 голос
/ 17 апреля 2019

Как уже упоминалось в комментариях, это в основном зависит от ваших требований.

Обычно хорошо иметь несколько свойств в перечислении, но они обычно должны быть постоянными и неизменными (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 в класс и создавать экземпляры произвольного количества на лету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...