2016-07-18 2 views
-2

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

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?

ответ

0

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

Теоретически можно было бы писать код как

public enum Whatever { 
    A, B; 

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

, но это было бы очень плохая идея.

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

Смежные вопросы