我正在使用名为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类,但然后我阻止所有继承的方法。因为我当时有很多,所以我必须编写许多代码来再次提供它们。那么你有什么更好的想法来解决这个问题吗?
提前致谢
答案 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...");
}
}