Re bonjour
Toutefois l'expansion des varargs survient après une première recherche. En effet les varargs sont en fait des tableaux [...]
En réalité tu as ceci :
Code :
1 2
| void overloading(String[][] s)
void overloading(Object[] o) |
Ok, les var-args pouvent être imaginés comme des tableaux (éventuellement vide).
D'après ce qui a été dit, après "extension des var args", un paramètre de type String[] correspondra avec l'argument de type Object[] et non String[][] ce qui est logique.
Et c'est peut être aussi pour cela qu'un des intervenants indique que la méthode
1 2
| //methode écrite par le développeur:
void overloading(Object o) |
correspondra à un appel "without using variable arity invocation", raison pour laquelle elle est appelée. En effet, après expansion des var arg, on a la méthode "généree"
void overloading(Object[] o)
que la JVM appelle en passant un (exactement un) String[] d'où la non arité évoquée. Tandis que si, c'est l'autre méthode qui est appelée , on aurait éventuellement un [][]String vide (si la JVM avait appelé la méthode sans aucun paramètre) d'où la notion d'arité qui apparait.
Au final l'appel sans arité est privilégié.
Mes questions maintenant sont:
1) Ma compréhension de la chose vous parait-elle juste?
2) J'ai l'impression que cet overloading non trivial est spécifique au fait qu'on passe un tableau et vous?
Merci d'avance encore une fois
Partager