mirror of
https://github.com/youthlql/JavaYouth.git
synced 2026-03-13 21:33:42 +08:00
纠错与更改所有文章的图床
This commit is contained in:
@@ -9,9 +9,8 @@ categories:
|
||||
- 重难点
|
||||
keywords: Java基础,泛型
|
||||
description: 万字长文详解Java泛型。
|
||||
cover: 'https://cdn.jsdelivr.net/gh/youthlql/lql_img/Java_Basis/logo.png'
|
||||
top_img: 'https://cdn.jsdelivr.net/gh/youthlql/lql_img/blog/top_img.jpg'
|
||||
abbrlink: 1c342bc4
|
||||
cover: 'https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/Java_Basis/logo.png'
|
||||
abbrlink: adb2faf0
|
||||
date: 2020-10-19 22:21:58
|
||||
---
|
||||
|
||||
@@ -592,7 +591,8 @@ class GenerateTest<T> {
|
||||
|
||||
/**
|
||||
* 1、在泛型类中声明了一个泛型方法,使用泛型E,这种泛型E可以为任意类型。可以类型与T相同,也可以不同。
|
||||
* 2、由于泛型方法在声明的时候会声明泛型<E>,因此即使在泛型类中并未声明泛型,编译器也能够正确识别泛型方法中识别的泛型。
|
||||
* 2、由于泛型方法在声明的时候会声明泛型<E>,因此即使在泛型类中并未声明泛型,编译器也能够正确识别
|
||||
泛型方法中识别的泛型。
|
||||
*/
|
||||
public <E> void show_3(E t) {
|
||||
System.out.println(t.toString());
|
||||
@@ -777,7 +777,8 @@ class Order<T> {
|
||||
/**
|
||||
* 2、泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系。换句话说,
|
||||
* 泛型方法所属的类是不是泛型类都没有关系。
|
||||
* 3、泛型方法,可以声明为静态的。原因:泛型参数是在调用方法时确定的。并非在初始化类时确定,所以无所谓
|
||||
* 3、泛型方法,可以声明为静态的。原因:泛型参数是在调用方法时确定的。并非在初始化类时确定,
|
||||
* 所以无所谓
|
||||
*/
|
||||
public static <E> List<E> copyFromArrayToList(E[] arr){
|
||||
|
||||
@@ -1037,7 +1038,7 @@ class Dog extends Animal {
|
||||
|
||||
`test1()`在编译时就会飘红
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lql_img/Java_Basis/Generic/0001.png">
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/Java_Basis/Generic/0001.png">
|
||||
|
||||
|
||||
|
||||
@@ -1289,7 +1290,7 @@ public class Test_difference {
|
||||
}
|
||||
```
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lql_img/Java_Basis/Generic/0002.png">
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/Java_Basis/Generic/0002.png">
|
||||
|
||||
### 区别3:?通配符可以使用超类限定而T不行
|
||||
|
||||
@@ -1382,7 +1383,7 @@ class D<T> {
|
||||
|
||||
Java中的泛型基本上都是在编译器这个层次来实现的,在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,编译器在编译的时候去掉,这个过程就称为类型擦除。
|
||||
|
||||
如在代码中定义的List<object>和List<String>等类型,在编译后都会编程List,JVM看到的只是List。而由泛型附加的类型信息对JVM来说是不可见的。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法避免在运行时刻出现类型转换异常的情况。类型擦除也是Java的泛型实现方法与C++模版机制实现方式之间的重要区别。
|
||||
如在代码中定义的`List<object>`和`List<String>`等类型,在编译后都会编程List,JVM看到的只是List。而由泛型附加的类型信息对JVM来说是不可见的。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法避免在运行时刻出现类型转换异常的情况。类型擦除也是Java的泛型实现方法与C++模版机制实现方式之间的重要区别。
|
||||
|
||||
可以通过两个例子,来证明java泛型的类型擦除。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user