Le support du multiple dispatch ("honorer" les multi-méthodes) est le fait qu'en cas de polymorphisme présentant plusieurs implémentations du même nom de méthode avec le même nombre de paramètres, où uniquement le type des paramètres de la méthode varie, le langage arrive à choisir la bonne méthode en explorant le type réel des arguments. Java ne disposant pas de cette fonctionnalité, le code suivant utilisera deux fois la méthode foo(Object) alors que dans le deuxième cas, le paramètre étant de type String il y a une "meilleure" méthode à utiliser. C'est une simplification de l'implémentation du langage (et une possibilité supplémentaire d'optimisation). En pratique pour mon cas personnel, il est rare que je me heurte à ce problème (mais ça peut être chiant lorsqu'on manipule génériquement des collections d'objets hétérogènes avec des méthodes spécialisées pour les types possibles, et ça m'est arrivé).
-=-=----=-=----=-=----=-=----=-=----=-=----=-=----=-=---
public static void foo(String s) {
System.out.println("foo(String s)");
}
public static void foo(Object o) {
System.out.println("foo(Object o)");
}
public static void main( String args[] ) throws IOException {
Object m = null;
foo(m);
m = "";
foo(m);
}
-=-=----=-=----=-=----=-=----=-=----=-=----=-=----=-=---
Donne :
foo(Object o)
foo(Object o)
Noter qu'on peut forcer la sélection de la bonne méthode avec, si cela s'y prète (mais c'est bien crade) :
foo((String)m);
Une observation parallèle intéressante est qu'en java, "null" peut être implicitement typé. En effet, foo((String)null) et foo((Object)null) sont valides et permettent de sélectionner entre les deux méthodes foo :)
# meuh
Posté par gc . En réponse au message C'est quoi le multi-méthode ?. Évalué à 6.
-=-=----=-=----=-=----=-=----=-=----=-=----=-=----=-=---
public static void foo(String s) {
System.out.println("foo(String s)");
}
public static void foo(Object o) {
System.out.println("foo(Object o)");
}
public static void main( String args[] ) throws IOException {
Object m = null;
foo(m);
m = "";
foo(m);
}
-=-=----=-=----=-=----=-=----=-=----=-=----=-=----=-=---
Donne :
foo(Object o)
foo(Object o)
Noter qu'on peut forcer la sélection de la bonne méthode avec, si cela s'y prète (mais c'est bien crade) :
foo((String)m);
Une observation parallèle intéressante est qu'en java, "null" peut être implicitement typé. En effet, foo((String)null) et foo((Object)null) sont valides et permettent de sélectionner entre les deux méthodes foo :)