隐藏枚举方法Java

时间:2016-07-18 10:23:46

标签: java methods enums override

是否可以隐藏枚举方法取决于枚举变量?

   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

1 个答案:

答案 0 :(得分:0)

你绝对不能用Java做到这一点。枚举的所有实例都是同一类的对象;因此,某些对象无法实现接口,而其他对象则无法实现。

理论上,你可能正在编写像

这样的代码
public enum Whatever {
  A, B;

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

但这是一个非常糟糕的主意。

您可能希望阅读有关Liskov substitution原则的内容,以了解其原因(该原则是关于类和子类的接口;但实质上,您的想法并没有那么多不同。)