Problème avec une surcharge de méthode
Je possède un taglib héritant d'un autre, et la fille surcharge une méthode de la mère :
Dans la mère : setValue(Object)
Dans la fille : setValue(String)
Lorque le tag est utilisé dans une page JSP, je réçois une erreur de la part du serveur :
Citation:
Error parsing JSP page /pages/main/client/cli_lst.jsp
Syntax error in source
/pages/main/client/cli_lst.jsp.java:256: reference to setValue is ambiguous, both method setValue(java.lang.String) in com.sfwan.sfnet.jsp.html.myformtags.LabelLib and method setValue(java.lang.Object) in com.sfwan.sfnet.jsp.html.myformtags.DateLabelLib match
__tag4.setValue(com.orionserver.util.ObjectUtils.toString(
^
1 error
Ce que je ne comprends pas, c'est que mes collègues n'obtiennent pas cet erreur, alors qu'ils ont les mêmes sources.
Quelqu'un a-t-il déjà eu ce problème ou une explication ? Une solution (là je crois que je rêve :roll: ) ?
J'utilise Orion 2.0.5
Merci de votre aide,
Strab
[Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java
Re: problème avec une surcharge de méthode
Salut,
Citation:
Envoyé par strabest
Je possède un taglib héritant d'un autre, et la fille surcharge une méthode de la mère :
Dans la mère : setValue(Object)
Dans la fille : setValue(String)
Le problème vient qu'il y a deux méthode setValue() pour la classe Fille (puisque que c'est une surcharge et non pas une redéfinition).
En effet, lorsque tu utilises une taglib, le serveur d'application utilise par exemple la méthode setValue() pour renseigner l'attribut value de ta taglib. Or dans ce cas ton serveur d'application ne sait pas laquelle il doit utiliser (reference to setValue is ambiguous).
Citation:
Envoyé par strabest
Ce que je ne comprends pas, c'est que mes collègues n'obtiennent pas cet erreur, alors qu'ils ont les mêmes sources.
Quelqu'un a-t-il déjà eu ce problème ou une explication ?
Il doivent surement utiliser un serveur d'application différent (ou une version différente). Il faudrait voir les specifications J2EE pour savoir quel serveur est aux normes...
Citation:
Envoyé par strabest
Une solution (là je crois que je rêve :roll: ) ?
La seule solution serait de ne pas surcharger setValue() mais de la redéfinir, par exemple dans la classe Fille :
Code:
1 2 3 4 5 6 7
| public void setValue (Object object) {
setValueAsString ( object==null ? null : object.toString );
}
public void setValueAsString (Strign string) {
// le code de ton setValue(String)
} |
Tu évites ainsi l'ambiguité...
a+