Java中泛型参数和 object 类型匹配问题

发布于 2022-09-11 23:16:12 字数 430 浏览 22 评论 0

代码如下:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清浅ˋ旧时光 2022-09-18 23:16:12

这跟泛型有啥关系?你这不就是个方法重载、传 null 究竟会解析哪个重载上的问题么?

自行百度 Java重载精确性原则,老生常谈的问题了。

清泪尽 2022-09-18 23:16:12

这就是普通的重载,会调用最特化的重载

停滞 2022-09-18 23:16:12

主要还是因为只有2个test方法,且它们之间有父子关系,例如test(Collection)和test(List list)方法,编译也会通过。但如果是test(Set set)和test(List list)方法,那编译肯定是不通过的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文