【问题标题】:Hiding enum methods Java隐藏枚举方法Java
【发布时间】:2016-07-18 10:23:45
【问题描述】:

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

   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

【问题讨论】:

    标签: java methods enums overriding


    【解决方案1】:

    你绝对不能在 Java 中做到这一点。枚举的所有实例都是同一类的对象;所以没有办法让一些对象实现接口,而其他对象不实现。

    理论上,您可以编写类似的代码

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

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

    您可能想了解Liskov substitution 原则以了解其原因(该原则是关于类和子类的接口;但本质上,您的想法并没有太大不同)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-31
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2022-06-16
      • 2010-09-13
      • 1970-01-01
      相关资源
      最近更新 更多