2010-07-14 3 views
0

J'utilise le framework gwt appelé smartgwt (cependant, le problème concerne gwt et java) Là, vous pouvez trouver la classe HLayout qui peut contenir des membres. Vous pouvez les ajouter en utilisant:Problème avec les méthodes

addMember(Canvas component) 

J'ai créé la classe RectConainer qui étend la classe HLayout. Ensuite, j'ai créé une autre classe Rect qui étend indirectement la classe Canvas. En ce moment, je veux RectConainer fournir:

addMember(Rect component) 

au lieu de:

addMember(Canvas component) 

En d'autres termes, je veux RectConainer de fournir toute méthode héritée + addMember (composant Rect), mais sans addMember (Toile composant). La seule façon de le faire (ce que je sais) est d'utiliser la classe Composite, mais ensuite je bloque toutes les méthodes héritées. Parce que j'ai beaucoup d'entre eux alors, je devrais écrire beaucoup de ligne de code pour les fournir à nouveau. Avez-vous de meilleures idées pour résoudre ce problème?

Merci à l'avance

Répondre

0

Si je vous comprends bien, vous avez la méthode addMember publique (composant Canvas) dans la classe HLayout et que vous voulez qu'il « cacher » dans votre RectConainer (Fournir addMember (composant Rect) à la place) . La réponse courte est "il n'est pas possible de masquer addMember (Canvas component)", car cela freinerait polymorphism, c'est-à-dire que votre classe enfant (RectConainer) ne pourrait pas fournir le contrat (interface) de votre classe parente (HLayout).

Qu'est-ce que vous pouvez faire (je ne peux pas penser à une bonne raison de le faire, mais quand même) est la suivante:

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

Mais encore une fois, réfléchir à deux fois avant de le faire: cette méthode est une partie d'un contrat que votre cadre pourrait compter sur. Si vous souhaitez limiter Canvas que vous pouvez passer à votre méthode addMember, il suffit de taper check:

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

Merci pour la réponse, maintenant je vois le problème avec le polymorphisme – peter

Questions connexes