Des conseils solides de Joshua Bloch (en vigueur à Java, 2nd Ed):
"que choisir comme arguments pour une méthode surchargée ceux qui ont radicalement différents types."
Un objet avec un de radicalement différent type est celui qui ne peut pas raisonnablement être jeté dans l'autre des types d'arguments. En suivant cette règle peut vous faire épargner des heures de débogage d'un mystérieux erreur peut se produire lorsque le compilateur choisit au moment de la compilation de la surcharge de la méthode que vous ne vous attendiez pas.
Vos lignes de code ne respectent pas cette règle et ouvrir la porte pour les bugs:
public TestOverload(int i){System.out.println("Int");}
public TestOverload(char... c){System.out.println("char");}
Un char
est interconvertibles avec un int
et donc la seule façon que vous pouvez prédire ce qui va arriver avec les invocations, c'est aller à la Java le Langage de Spécification et de lire un peu les arcanes des règles sur la façon dont les surcharges sont résolus.
Heureusement, cette situation ne devrait pas besoin de JLS de la recherche. Si vous avez des arguments qui ne sont pas radicalement différents les uns des autres, probablement la meilleure option est de ne pas surcharger. Donner les méthodes des noms différents, de sorte qu'il n'y a aucune possibilité d'erreur ou de confusion de la part de tous ceux qui peuvent avoir besoin de maintenir le code.
Le temps est de l'argent.