2010-07-14 75 views
0

我使用称为smartgwt的gwt框架(但是,问题涉及gwt和java)在那里,您可以找到可包含成员的HLayout类。你可以使用它们来添加它们:提供方法的问题

addMember(Canvas component) 

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

addMember(Rect component) 

代替:

addMember(Canvas component) 

换句话说,我想RectConainer提供所有继承的方法+使用addMember(矩形分量),但没有使用addMember(帆布零件)。如何做到这一点(我知道)的唯一方法是使用Composite类,但是我阻止了所有继承的方法。因为我有很多这样的代码,所以我必须编写许多代码行来再次提供它们。那么你有什么更好的想法如何解决这个问题?

在此先感谢

回答

0

如果我理解正确的话,你有公众使用addMember(Canvas组件)在HLayout类的方法,你想在你的RectConainer“隐藏”它(提供使用addMember(矩形分量) 代替) 。简短的回答是“不可能隐藏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方法,只需做类型检查:

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

感谢您的回应,现在我看到了多态性的问题 – peter 2010-07-14 18:19:54