避免使用带有附加方法的公共接口进行转换

Avoid casting with a common Interface with additional methods

我有 2 个 class,它们都有一个共同的基础 class。但最重要的是,它们还有每个 class 独有的额外方法。 它们在基本类型的对象集合中进行管理。

现在每当我想使用额外的方法时,我都必须检查类型和转换。

我怎样才能避免这种情况? 到目前为止我想出了

我想知道是否有人有其他想法。 (伪代码)

Interface CommonBase
{
    void Common method()
}

class SubClassA : CommonBase
{
    void Extra MethodA()
}

class SubClassB : CommonBase
{
    void Extra MethodB()
}

我有一个列表 List<CommonBase>。 如何避免在调用方法 A/B 之前进行强制转换?或者以某种方式执行方法 A/B?

的功能

您试图完成的行为是您想要引用具有基本 class/interface 类型的子 class 实例,但您想要调用特定于子 [=20] 的方法=]是的。这是矛盾的,因为在处理不同类型但具有共同基础的对象时,假定处理器不关心子类型,但在您的情况下,处理器确实关心子类型并且想要做子类型特定的东西。你是对的,一种方法是使用 instanceof 运算符检查类型并转换它,是的,它不是很优雅。

我能想到的另一种方法,可能是唯一的方法是在 CommonBase 中使用另一种具有通用名称的方法,例如 "delegate" 或 "process",而不定义它在内部做什么,然后提供此方法的子类型中的实现。

interface CommonBase {
   void delegate();
}
class SubTypeA implements CommonBase {
   public void delegate() {
       //invoke actual method with proper name
   }
}
class SubTypeB implements CommonBase {
   public void delegate() {
       //invoke actual method with proper name
   }
}

希望对您有所帮助。