基于类而不使用instanceof来区分代码块

时间:2016-01-28 17:35:31

标签: java inheritance override instanceof

所以我有以下inteface I,它由类AB实现:

interface I { ... }
class A implements I { ... }
class B implements I { ... }

然后我有另一个接口OverrideMe,其方法有一个对象I作为参数,一个类覆盖该方法,并根据该参数的实际类别而有所不同:

interface OverrideMe {
   void method(I parameter)
}

class Overriding implements OverrideMe {
   @Override
   void method(I parameter) {
      if (I instanceof A) {
         // Code block for A
      }
      else if (I instanceof B) {
         // Code block for B
      }
   }
}

有没有办法按类型区分两个代码块而不使用instanceof?我不确定是否可以使用继承来完成。

请注意,我无法控制IAB,我必须按原样使用它们。

1 个答案:

答案 0 :(得分:1)

是的,你可以根据你想在代码块中做什么来做。如果您正在寻找在A或B实例上运行某些b逻辑。您可以在接口I中提供方法声明,并在A类和B类中提供实现。示例,

interface I { 
   void doSomething();
 }
class A implements I {
   void doSomething(){
    //do something here 
} 
 }
class B implements I { 

   void doSomething(){
    //do something here 
} 
 }

interface OverrideMe {
   void method(I parameter)
}

class Overriding implements OverrideMe {
   @Override
   void method(I parameter) {
       parameter.doSomething();
   }
}

如果不是上述情况,您可能必须使用instanceof