gpt4 book ai didi

java - java 中类型删除如何工作?

转载 作者:行者123 更新时间:2023-12-01 17:35:04 25 4
gpt4 key购买 nike

我正在查看 http://download.oracle.com/javase/tutorial/java/generics/erasure.html 的 TypeErasure 主题其中说该编译器删除与类或方法中的类型参数和类型参数相关的所有信息。

现在考虑下面的代码

public class Box<T> {
private T t; // lineA, T stands for "Type"

public void add(T t) { // lineB
this.t = t; // lineC
}

public T get() { // lineD
return t; // lineE
}
}

现在里面main方法我有下面的代码片段

Box<String> box1 = new Box<String>(); // line1
box1.add("Scott"); // line2
String s1tr=box1.get(); // line3

Box<Integer> box2 = new Box<Integer>(); // line4
box2.add(1); // line5
Integer k=box2.get(); // line6

现在在上面的代码中(在 Box 类和 main 方法中)编译器将进行哪些更改以及在哪一行?

正如链接所说,编译器会删除与类或方法中的类型参数和类型参数相关的所有信息,当编译器将编译Box类,它会删除所有 T , <String> , <Integer>出现次数 Box类和main方法分别是?如果是,删除 T 后编译后的代码是什么? ?

最佳答案

类型删除发生在编译时。 Java 编译器从源代码中删除这些通用类型信息,并根据需要添加强制转换并提供字节代码。因此,生成的字节码将不包含有关类型参数和实参的任何信息。 它看起来就像没有泛型的旧 java 代码。无法在运行时确定 T 的值,因为该信息在代码编译之前已被删除。

关于java - java 中类型删除如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7371433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com