提供方法的问题

时间:2010-07-14 16:27:29

标签: java gwt

我正在使用名为smartgwt的gwt框架(但问题是关注gwt和java)在那里,你可以找到可以包含成员的HLayout类。您可以使用以下方式添加它们:

addMember(Canvas component)

我创建了RectConainer类,它扩展了HLayout类。然后,我创建了另一个类Rect,它间接扩展了Canvas类。现在,我希望RectConainer提供:

addMember(Rect component)

而不是:

addMember(Canvas component)

换句话说,我希望RectConainer提供所有继承的方法+ addMember(Rect组件),但没有addMember(Canvas组件)。唯一的方法(我知道)是使用Composite类,但然后我阻止所有继承的方法。因为我当时有很多,所以我必须编写许多代码来再次提供它们。那么你有什么更好的想法来解决这个问题吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你在HLayout类中有公共addMember(Canvas组件)方法,你想在你的RectConainer中“隐藏”它(提供addMember(Rect组件)) 代替)。简短的回答是“无法隐藏addMember(Canvas组件)”,因为它会使polymorphism失效,即你的子类(RectConainer)无法提供父类的契约(接口) (HLayout)。

你可以做什么(我想不出有任何好的理由去做,但仍然是):

@Override
public void addMember(Canvas component) {
    throw new UnsupportedOperationException("Do not call this method. Call addMember(Rect component) instead");
}

但是,在这样做之前再三思考:这个方法是你的框架可能依赖的某个合同的一部分。如果要限制可以传递给addMember方法的Canvas,只需键入check:

@Override
public void addMember(Canvas component) {
    if (!Rect.class.isInstance(component)) {
        throw new IlligalArgumentException("Only Rect is accepted. Sorry...");
    }
}