根据 class 不带 instanceof 区分代码块

Differentiate blocks of code based on class without instanceof

所以我有以下接口 I 由 classes AB 实现:

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

然后我有另一个接口 OverrideMe,其方法有一个对象 I 作为参数,还有一个 class 覆盖该方法并根据实际 class 该参数:

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 并且,我必须按原样使用它们。

是的,你可以根据你想在代码块中做什么。如果您正在寻找在 A 或 B 的实例上操作一些 b 逻辑。您可以在接口 I 内提供方法声明,并在 class 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