J'ai une implémentation d'une classe Mapper qui accepte Object comme paramètre dans l'une des fonctions map(Object object)
. Les map(T t)
repos fonctions acceptent Entier ou classe, etc.Double Dispatch lorsque la méthode accepte la classe d'objets
Lorsque je tente de passer un entier, il s'Autoboxed en entier et appelle la map(Object object)
au lieu du map(Integer integer)
.
J'ai fait des recherches pour Double Dispatch et j'ai vu que je pouvais utiliser le Visitor Pattern. Mais cela ne s'applique pas dans mon cas car je ne passe pas d'objets personnalisés que je pourrais leur faire implémenter une interface avec accept()
.
La méthode susmentionnée accepte tous les objets.
Existe-t-il une sorte de solution pour le Double Dispatching avec des objets Java lorsque vous avez une méthode qui accepte également Object?
public BaseMatcher map(Object object) {
return something();
}
public BaseMatcher map(Integer integer) {
return somethingOther();
}
public BaseMatcher map(Class<? extends Exception> klass) {
return somethingOtherOther();
}
L'appel sur ces fonctions map(), serait la suivante: foo(Object object) { mapper.map(object); }
qui conduit à map(Object object)
invoquée.
Jetez un oeil à cette question: http://stackoverflow.com/questions/1572322/overloaded-method-selection-based-on-the-parameters-real-type. Pour déterminer la signature de la méthode invoquée, il utilise le type de temps de compilation ('Object'), pas le type d'exécution. – JMSilla
@JMSilla J'ai déjà recherché tous les cas possibles. C'est pourquoi j'ai demandé, parce que j'essaye de voir s'il y a une solution possible au problème. – Pavlos