8000 Update and rename type-erasue.md to type-erasure.md · amgm-coder/toBeTopJavaer@fd8b6e6 · GitHub
[go: up one dir, main page]

Skip to content

Commit fd8b6e6

Browse files
authored
Update and rename type-erasue.md to type-erasure.md
1 parent cee1839 commit fd8b6e6

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

docs/basics/java-basic/type-erasue.md renamed to docs/basics/java-basic/type-erasure.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212

1313
`C++``C#`是使用`Code specialization`的处理机制,前面提到,他有一个缺点,那就是**会导致代码膨胀**。另外一个弊端是在引用类型系统中,浪费空间,因为引用类型集合中元素本质上都是一个指针。没必要为每个类型都产生一份执行代码。而这也是Java编译器中采用`Code sharing`方式处理泛型的主要原因。
1414

15-
`Java`编译器通过`Code sharing`方式为每个泛型类型创建唯一的字节码表示,并且将该泛型类型的实例都映射到这个唯一的字节码表示上。将多种泛型类形实例映射到唯一的字节码表示是通过**类型擦除**`type erasue`)实现的。
15+
`Java`编译器通过`Code sharing`方式为每个泛型类型创建唯一的字节码表示,并且将该泛型类型的实例都映射到这个唯一的字节码表示上。将多种泛型类形实例映射到唯一的字节码表示是通过**类型擦除**`type erasure`)实现的。
1616

1717
* * *
1818

1919
### 二、什么是类型擦除
2020

21-
前面我们多次提到这个词:**类型擦除**`type erasue`),那么到底什么是类型擦除呢?
21+
前面我们多次提到这个词:**类型擦除**`type erasure`),那么到底什么是类型擦除呢?
2222

2323
> 类型擦除指的是通过类型参数合并,将泛型类型实例关联到同一份字节码上。编译器只为泛型类型生成一份字节码,并将其实例关联到这份字节码上。类型擦除的关键在于从泛型类型中清除类型参数的相关信息,并且再必要的时候添加类型检查和类型转换的方法。 类型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。 类型擦除的主要过程如下: 1.将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。(这部分内容可以看:[Java泛型中extends和super的理解][2]) 2.移除所有的类型参数。
2424

0 commit comments

Comments
 (0)
0