4

这是交易:我有两个不同类的对象, aDataSizeAction和 a DataColorActionEncoderAction这些类在链的不远处有一个共同的祖先。

这两个对象都公开了一个名为的方法,该方法setScale(int scale)为它们执行的编码设置比例类型。该方法在两种情况下都做同样的事情。

但是,该方法不存在于任何共同的祖先中(顺便说一句,这个 OO 是我正在使用的库,并且设计不取决于我的判断)。

我想编写一个采用 DataSizeAction 或 DataColorAction 并在该对象上调用 setScale 的方法。

我的问题是:在我用 暴力破解单独的案例之前instanceof,有没有更优雅的方法来处理这个问题?

谢谢!

4

2 回答 2

4

您可以将接口添加到您的层次结构吗?

interface IScalable {
   void setScale(int scale);
   int getScale();
}

class DataSizeAction extends EncoderAction implements IScalable {
   ...
}

class SomeoneElse {
   private int scale = 2;

   public void setScale(IScalable scalable) {
      scalable.setScale(this.scale);
   }
}
于 2012-08-10T19:08:49.187 回答
3

试试这个:

  1. 制作另一个扩展的类EncoderAction
  2. 在其中声明setScale为抽象方法
  3. 拥有DataSizeActionDataColorAction扩展您的新课程。

现在,您可以编写代码来引用新基类的实例并避免调用instanceof检查。

注意:即使我在这里应该工作,我会推荐Jonathon的回答。由于这是功能的保证,并且与您的对象的组合没有任何关系,因此接口可能是要走的路。

于 2012-08-10T19:08:09.313 回答