Java中泛型参数和 object 类型匹配问题
代码如下:
static void test(Object obj) {
System.out.println("参数为 Object 类型");
}
static void test(ArrayList list) {
System.out.println("参数为 ArrayList 类型");
}
public static void main( String[] args ){
test(null);
}
实际测试的结果:参数为 ArrayList 类型
我知道泛型存在类型擦除,会将不明确类型转换为 Object 类型,那如果是这样应该都能匹配,编译器是报错的。实际上是编译通过,匹配的是泛型参数,希望大佬能解释下这个匹配结果的原因。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这跟泛型有啥关系?你这不就是个方法重载、传 null 究竟会解析哪个重载上的问题么?
自行百度
Java重载精确性原则
,老生常谈的问题了。这就是普通的重载,会调用最特化的重载。
主要还是因为只有2个test方法,且它们之间有父子关系,例如test(Collection)和test(List list)方法,编译也会通过。但如果是test(Set set)和test(List list)方法,那编译肯定是不通过的。