代码之家  ›  专栏  ›  技术社区  ›  Tanvi Jaywant

如何重载类

  •  3
  • Tanvi Jaywant  · 技术社区  · 6 年前

    起初,我有一个 Plan 类,其行为如下:

    class Plan {
         public enum Type {
             FOO
         }
    
         String checkFoo() {
            // some check for foo
         } 
    
         String doSomething() {
         }
    } 
    

    现在,我需要添加另一种类型 Bar

    class Plan {
         public enum Type {
             FOO, BAR
         }
    
         String checkFoo() {
            // some check for foo
         } 
    
         String checkBar() {
           // some check for bar
         }   
    
          String doSomething() {
         }
    } 
    

    现在,checkFoo只适用于Foo,但不适用于Bar,反之亦然。 最好的“设计模式”是如何构建的?我们应该在每个方法中添加检查并抛出异常吗?有共同的解决方案吗?

    2 回复  |  直到 6 年前
        1
  •  4
  •   Timothy Truckle Vincent Boutot    6 年前

    这里的“共同解决方案”是 多态性

    在Java an中 枚举 是(几乎)一个普通的班级。因此it常量可以实现 接口 像这样:

    interface Checkable{
      String doCheck();
    }
    
    class Plan {
         public enum Type implements Checkable{
             FOO{
                @Overide public String doheCheck() {
                   return "result of Foo check";
                }
             }, BAR{
                @Overide public String doheCheck() {
                   return "result of Bar check";
                }
             };
         }
    
         String check() {
              for(Checkable checkable: Type.values()){
                  checkable.doCheck();
         } 
    
    
          String doSomething() {
         }
    } 
    

    无论如何,您的来电者不必处理以下事实 Type 要检查的。。。

        2
  •  3
  •   Eugene    6 年前

    如果我理解正确,您可以创建稍微不同的枚举:

    enum Type {
    
        FOO {
            public  String getMe(){
                return "FOO";
            }    
        };
    
        // force every instance to implement this
        public abstract String getMe();
    }