gpt4 book ai didi

java - 为什么这个通用的 java 方法接受两个不同类型的对象?

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:23 25 4
gpt4 key购买 nike

此方法应获取两个相同类型的对象并随机返回其中一个对象:

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,为什么这次会给我一个错误?

最佳答案

T 被推断为 Object,并且两个参数都隐式向上转换。

因此代码等同于:

Main.<Object>random((Object)"string1", (Object)new Integer(10));

可能更令人惊讶的是以下编译:

random("string1", 10);

第二个参数被自动装箱到一个 Integer 中,然后两个参数都被向上转换为 Object

关于java - 为什么这个通用的 java 方法接受两个不同类型的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13941716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com