这是交易:
我有两个不同类的对象,DataSizeAction
和DataColorAction
。这些类在链的不远处有一个共同的祖先EncoderAction
。
这两个对象都公开了一个名为setScale(int scale)
的方法,该方法为它们执行的编码设置了比例类型。在这两种情况下,该方法都做同样的事情。
但是,这种方法并不存在于任何共同的祖先中(顺便说一下,这个OO是我正在使用的库,设计不在我自己的判断范围内)。
我想编写一个方法,该方法接受DataSizeAction或DataColorAction并在该对象上调用setScale。
我的问题是:在我使用instanceof
强行执行单独的案例之前,有没有更优雅的方法来处理这个问题?
谢谢!
答案 0 :(得分:3)
试试这个:
EncoderAction
setScale
声明为DataSizeAction
和DataColorAction
扩展您的新班级。现在,您可以编写代码来引用新基类的实例,并避免调用instanceof
检查。
注意:即使我在这里有所作为,我也会推荐Jonathon的答案。由于这是一个功能的保证,并且与您的对象的组成没有任何关系,因此接口可能是最佳选择。
答案 1 :(得分:3)
您可以在层次结构中添加接口吗?
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);
}
}