2016-07-18 7 views
-2

enumメソッドを非表示にする方法は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でそれを行うことはできません。 enumのすべてのインスタンスは、同じクラスのオブジェクトです。したがって、いくつかのオブジェクトにインタフェースを実装させる方法や、そうでないものはありません。

理論的には、

public enum Whatever { 
    A, B; 

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

のようなコードを書くことができるが、それは本当に悪い考えです。

Liskov substitutionの原則を読んで(その原理はクラスやサブクラスのインターフェイスについてですが、本質的にあなたのアイデアはそれほど違いはありません)という考えを知りたいかもしれません。

関連する問題