此方法应采用两个相同类型的对象并随机返回其中一个对象:
public static <T> T random(T o1, T o2)
{
return Math.random() < 0.5 ? o1 : o2;
}
现在,为什么编译器接受两个具有不同类型的参数?
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,为什么这次它会给我一个错误?