List的泛型擦除和Java 方法重载之坑

首先看一段代码
虽然泛型不同,但是依然不能重载,编译根本不能通过

   public void addData(List list) {
        if (list == null || list.isEmpty()) {
            return;
        }
    }

  public void addData(List list) {
        if (list == null || list.isEmpty()) {
            return;
        }
    }

Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。

看一下官方说明,在编译期间泛型是被擦除的,所以去掉泛型,原形都是List,所以不能重载就能明白了

你可能感兴趣的:(Android积累)