相关疑难解决方法(0)

Java类型擦除 - 为什么我在查看字节码时能看到类型?

我试图理解为什么不允许在类中编写这两个方法

 public bool plus(List<String>) {return true;}
 public bool plus(List<Integer>) {return true;}
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚它与类型擦除有什么关系,但是当我反编译以下代码时

public class Test<T> {

   boolean plus2(List<T> ss) {return false;}
   boolean plus(List<String> ss) {return false;}
   boolean plus(Set<Integer> ss) {return false;}
}
Run Code Online (Sandbox Code Playgroud)

当我用Java反编译器(jd)反编译它时,我得到了同样的结果

即使我打印字节代码,我也可以清楚地看到类型.
(看看那些声明'但是确保在字节码中删除类型'的答案 ')

    Compiled from "Test.java"
    public class com.example.Test<T> {
    public com.example.Test();
            Code:
            0: aload_0
            1: invokespecial #1                  // Method java/lang/Object."<init>":()V
            4: return

            boolean plus2(java.util.List<T>);
            Code:
            0: iconst_0
            1: ireturn

            boolean plus(java.util.List<java.lang.String>);
            Code:
            0: iconst_0
            1: ireturn

            boolean plus(java.util.Set<java.lang.Integer>);
            Code:
            0: iconst_0
            1: ireturn
            }
Run Code Online (Sandbox Code Playgroud)

java type-erasure java-8

4
推荐指数
1
解决办法
122
查看次数

标签 统计

java ×1

java-8 ×1

type-erasure ×1