Скрытие перечислимых методов Java

java methods enums overriding

79 просмотра

1 ответ

1 Репутация автора

Можно ли скрыть метод enum в зависимости от переменной enum?

   enum Row1  {
    MainRow1() {
        Row2 getUpg1() {
            return Row2.UPGR1;
        }
        Row2 getUpg2() {
            return Row2 .UPGR2;
        }
        Row2 getUpg3() {
            throw new EmptyStackException();
        }


    }, MainRow2() {
        Row2 getUpg3() {
            return Row2 .UPGR3;
        }
    };


    Row2 getUpg1() { return null;}

    Row2 getUpg2() { return null; }

    Row2 getUpg3() {return null; }
}   enum Row2{...}

После этого я хочу вызвать Row1, но как я могу отключить опцию Row1.MainRow1.getUpg3?

Автор: Efpkaf Источник Размещён: 18.07.2016 10:23

Ответы (1)


0 плюса

112324 Репутация автора

Вы абсолютно не можете сделать это в Java. Все экземпляры перечисления являются объектами одного класса; поэтому нельзя заставить одни объекты реализовывать интерфейс, а другие - нет.

Теоретически, вы могли бы писать код

public enum Whatever {
  A, B;

  void foo() {
    if (this == A) {
      throw new RuntimeException("foo() should not be called on A");
    }

но это было бы действительно плохой идеей.

Возможно, вы захотите прочитать о принципе подстановки Лискова, чтобы понять, почему это так (этот принцип касается интерфейсов для классов и подклассов; но, по сути, ваша идея не так уж отличается).

Автор: GhostCat says Reinstate Monica Размещён: 18.07.2016 10:33
Вопросы из категории :
32x32