次のコードを検討してください
/**
* 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;
}
どちらも機能的には同じようです。ただし、それらは明らかに互いにオーバーロードしている同じクラスに表示される可能性があります。次のコードを使用すると、2番目のメソッドが呼び出されるようです。2番目のオーバーロードメソッドがないと、最初のメソッドが呼び出されます。誰かが詳細な説明を提供できますか?
Integer[] array = new Integer[10];
for (int i = 0; i < array.length; ++i)
array[i] = i;
System.out.println("Count > 5 = " + countGreaterThan(array, 5));