Как перегрузить класс - PullRequest
0 голосов
/ 14 мая 2018

Изначально у меня был класс 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 ]

0 голосов
/ 14 мая 2018

«Общее решение» здесь полиморфизм .

В Java enum является (почти) обычным классом. Поэтому константы могут реализовывать интерфейсов следующим образом:

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 s для проверки ...

0 голосов
/ 14 мая 2018

Если я правильно понял, вы можете создать свой enum немного по-другому:

enum Type {

    FOO {
        public  String getMe(){
            return "FOO";
        }    
    };

    // force every instance to implement this
    public abstract String getMe();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...