Considérons le code suivant
/**
* Generic method with bounds
*/
public static <T> int countGreaterThan(Comparable<T>[] anArray,
T elem) {
int count = 0;
for (Comparable<T> e : anArray)
if (e.compareTo(elem) > 0)
++count;
return count;
}
/**
* Alternative to above
*/
public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) {
int count = 0;
for (T e : anArray)
if (e.compareTo(elem) > 0)
++count;
return count;
}
Il semble que les deux soient fonctionnellement identiques. Cependant, elles peuvent apparaître dans la même classe en se surchargeant mutuellement. Lorsque j'utilise le code suivant, il semble que la deuxième méthode soit invoquée. Sans la deuxième méthode de surcharge, c'est la première méthode qui est invoquée. Quelqu'un peut-il fournir une explication approfondie ?
Integer[] array = new Integer[10];
for (int i = 0; i < array.length; ++i)
array[i] = i;
System.out.println("Count > 5 = " + countGreaterThan(array, 5));