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 类型,那如果是这样应该都能匹配,编译器是报错的。实际上是编译通过,匹配的是泛型参数,希望大佬能解释下这个匹配结果的原因。

阅读 4.3k
3 个回答

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

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

新手上路,请多包涵

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题