Типы перечислений Gettin не могут быть созданы. Исключение

java enums instantiation

5424 просмотра

3 ответа

Я получаю RuntimeException

Типы перечислений не могут быть созданы

Я не знаю почему. То, что я хочу, это определить год по целочисленному значению, как у меня 9, поэтому год для других методов - 2006. Код:

public class P21Make {

    enum Catalog {
        year2005(9),year2006(12),year2007(15),year2008(18),
        year2009(21),year2010(23),year2011(25),year2012(28),
        year2013(31),year2014(33),year2015(36),year2016(39),
        year2017(42),year2018(45),year2019(48),year2020(51);

        private int id;    

        Catalog(int c){
            this.id=c;
        }
    }

    public P21Make() {
        Catalog c = new Catalog(9);   // The Exception 
    }
}
Автор: Zion Источник Размещён: 12.11.2019 09:26

Ответы (3)


6 плюса

Решение

Вы не можете создать экземпляр enum таким образом. У вас есть 2 возможности

1.Catalog c = Catalog.year2005;

2. Сделайте следующее изменение в вашем перечислении, добавив метод, который может возвращать ваше перечисление на основе кода (целочисленное значение). Например

   enum Catalog {
      year2005(9),year2006(12),year2007(15),year2008(18),
      year2009(21),year2010(23),year2011(25),year2012(28),
      year2013(31),year2014(33),year2015(36),year2016(39),
      year2017(42),year2018(45),year2019(48),year2020(51);
      private int id;

      Catalog(int c){
         this.id=c;
      }


      static Map<Integer, Catalog> map = new HashMap<>();

      static {
         for (Catalog catalog : Catalog.values()) {
            map.put(catalog.id, catalog);
         }
      }

      public static Catalog getByCode(int code) {
         return map.get(code);
      }
   }

а затем назначить так

Catalog c = Catalog.getByCode(9);
Автор: sol4me Размещён: 15.12.2014 12:45

1 плюс

Вы не должны вызывать конструктор в enum.

Вы должны позвонить Catalog c = Catalog.year2005;так.

Автор: Siva Kumar Размещён: 15.12.2014 12:42

0 плюса

Вот еще один способ

enum class WWGameState private constructor(var intValue: Int)  {
    pregame(0),
    inProgress(1),
    paused(2),
    over(3);

    companion object
    {
        internal fun build(i: Int): WWGameState
        {
            for (gs in WWGameState.values())
            {
                if (gs.intValue == i)
                {
                    return gs
                }
            }

            return WWGameState.pregame

        }
    }
}

Использование:

gameState = WWGameState.build(savedState!!.getInt("MODE"))
Автор: user3561494 Размещён: 15.08.2018 06:22
Вопросы из категории :
32x32