简单认识泛型【java】

目录

1.什么是泛型

 2.引出泛型

2.1语法 

3. 泛型类的使用

3.1 语法

4 泛型如何编译的

4.1 擦除机制

5.泛型的上下界

5.1 语法

 6.注意


1.什么是泛型

        一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的 代码,这种刻板的限制对代码的束缚就会很大。------- 来源《Java编程思想》对泛型的介绍。      

        泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。

 2.引出泛型

         泛型的主要目的:就是指定当前的容器,要持有什么类型的对象。让编译器去做检查。此时,就需要把类型,作为参数传递。需要什么类型,就传入什么类型。

2.1语法 

class 泛型类名称<类型形参列表> {
// 这里可以使用类型参数
}
class ClassName<T1, T2, ..., Tn> {
}

class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {
// 这里可以使用类型参数
}
class ClassName<T1, T2, ..., Tn> extends ParentClass<T1> {
// 可以只使用部分类型参数
}
注意:
1.类名后的 <T> 代表占位符,表示当前类是一个泛型类
了解: 【规范】类型形参一般使用一个大写字母表示,常用的名称有:
        E 表示 Element
        K 表示 Key
        V 表示 Value
        N 表示 Number
        T 表示 Type
        S, U, V 等等 - 第二、第三、第四个类型
2.不需要进行类型转换

3. 泛型类的使用

3.1 语法

泛型类<类型实参> 变量名; // 定义一个泛型类引用
new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象

MyArray<Integer> list = new MyArray<Integer>();

         当编译器可以根据上下文推导出类型实参时,可以省略类型实参的填写。

例如:

MyArray<Integer> list = new MyArray<>(); // 可以推导出实例化需要的类型实参为 Integer
  1.   泛型是将数据类型参数化,进行传递
  2.  使用 <T> 表示当前类是一个泛型类。
  3.  泛型目前为止的优点:数据类型参数化,编译时自动进行类型检查和转换

泛型如何编译的

4.1 擦除机制

        让我么来了解一下泛型到底是怎么编译的?
        通过命令:javap -c 查看字节码文件,所有的 T 都是 Object

        在编译的过程当中,将所有的T替换为Object这种机制,我们称为:擦除机制

        Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息。         

5.泛型的上下界

在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。

5.1 语法

class 泛型类名称<类型形参 extends 类型边界> {
...
}
public class MyArray<E extends Number> {
...
}

MyArray<Integer> l1; // 正常,因为 Integer 是 Number 的子类型
MyArray<String> l2; // 编译错误,因为 String 不是 Number 的子类型

下界通配符 <? super T>

// 下界通配符 <? super T>
class 泛型类名称<类型形参 extends 类型边界> {
...
}
public class MyArray<E super Number> {
...
}


	MyArray(Float) l1;// 编译正确		
	// Object 是 Number 的父类 
	MyArray(Object) l2;// 编译错误

 6.注意

       注意 不能new泛型类型的数组     
public T [] array = ( T []) new Object [ 10 ]; // 是不对的
        通俗讲就是:返回的数组里面,可能存放的是任何的数据类型,可能是 String ,可能是 Person ,运行的时 候,直接转给Integer 类型的数组,编译器认为是不安全的.
public T [] array ;//正确; 

        泛型提供了一些好处,如改进的类型安全性、代码重用和更干净的代码。它们允许你编写更通用的算法和数据结构,可以处理不同的类型,而不会牺牲编译时的类型检查。通过使用泛型,你可以创建更加健壮和可维护的Java代码。 

结语:泛型的相关分享到这里就结束了,希望对大家的学习会有帮助,如果大家有什么问题或者不同的见解,欢迎大家评论区的留言, 感谢支持

猜你喜欢

转载自blog.csdn.net/qq_61576108/article/details/134460558