переопределить абстрактный метод перечисления - PullRequest
5 голосов
/ 23 мая 2011

Действительный код Java:

enum ProductType {
  CASH_BONUS { 

     void doSomething() {}    
  },

  CUSTOMIZABLE { 
     void doSomething() {}    
  }

  abstract void doSomething()
}

Но когда я пытаюсь запустить это в консоли Groovy, я получаю ошибки:

Не может иметьабстрактный метод в неабстрактном классе.Класс ProductType должен быть объявлен как абстрактный или должен быть реализован метод void doSomething ().в строке: -1, столбец: -1

Не может иметь абстрактный метод в неабстрактном классе.Класс ProductType должен быть объявлен абстрактным, или метод void doSomething () не должен быть абстрактным.в строке: 11, столбец: 3

Кажется, я помню, что читал, что Groovy (пока) не поддерживает переопределяющие методы для констант enum, это правильно, и если так, есть ли элегантный способэмулировать это поведение?

Обновление

Эта ошибка была исправлена ​​в Groovy 1.8.0

.

Ответы [ 2 ]

4 голосов
/ 24 мая 2011

это ошибка: http://jira.codehaus.org/browse/GROOVY-4641

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

enum ProductType {
    CASH_BONUS(1) {
        void doSomething() {
        }
    },
    CUSTOMIZABLE(2) {
        void doSomething() {
        }
    };
    ProductType(int n) {
        this.n=n;
    }
    final int n;
    void doSomething() {
        throw new UnsupportedOperationException()
    }
}

ProductType.CASH_BONUS.doSomething();
ProductType.CUSTOMIZABLE.doSomething();
0 голосов
/ 11 декабря 2012

Обновление Groovy Compile с 1.8 до 2.0 в eclipse работало для меня

(Затмение 3.7)

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