このメソッドは、同じタイプの2つのオブジェクトを受け取り、それらのオブジェクトの1つをランダムに返します。
public static <T> T random(T o1, T o2)
{
return Math.random() < 0.5 ? o1 : o2;
}
では、なぜコンパイラーは特徴的なタイプの2つのパラメーターを受け入れるのでしょうか。
random("string1", new Integer(10)); // Compiles without errors
編集:両方のパラメーターが暗黙的にアップキャストされていることがわかったので、次のメソッドを呼び出すときに コンパイラーが文句を言う のはなぜかと思います。
public static <T> List<T> randomList(List<T> l1, List<T> l2) {
return Math.random() < 0.5 ? l1 : l2;
}
電話:
randomList(new ArrayList<String>(), new ArrayList<Integer>()); // Does not Compile
これらのArrayListパラメーターもObjectにアップキャストされている場合、今回エラーが発生するのはなぜですか?