泛型

1、泛型的概述

在JDK1.5之前,把对象放入到集合中,集合不会记住元素的类型,取出时,全都变成Object类型。
泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr14的实现。泛型机制将类型转换时的类型检查从运行时提前到了编译时,
使用泛型编写的代码比杂乱的使用object并在需要时再强制类型转换的机制具有更好的可读性和安全性。
例如在集合接口中,集合类中出现的<>就是泛型,即参数化类型 ,<>中的字母代表的是类型。
泛型程序设计意味着程序可以被不同类型的对象重用。

  1. 可读性,从字面上就可以判断集合中的内容类型;
  2. 类型检查,避免插入非法类型。
  3. 获取数据时不在需要强制类型转换

总之:

泛型(Generics)是把类型参数化,运用于类、接口、方法中,可以通过执行泛型类型调用分配一个类型,将用分配的具体类型替换泛型类型。
然后,所分配的类型将用于限制容器内使用的值,这样就无需进行类型转换,还可以在编译时提供更强的类型检查。

2、泛型的使用标准

类型参数(又称类型变量)用作占位符,指示在运行时为类分配类型。

根据需要,可能有一个或多个类型参数,并且可以用于整个类。

根据惯例,类型参数是单个大写字母,该字母用于指示所定义的参数类型。下面列出每个用例的标准类型参数:

java<T>泛型

3、泛型类 

在类上添加一个类型的定义,在使用类时指定一个类型,就可以对传入的数据进行类型检查,

在取出时,不必进行类型转换了,这样的类就是泛型类。

java<T>泛型

java<T>泛型

泛型类的缺点:
每次针对不同的类型的参数,都必须创建不同类型的对象,这使得方法依赖于创建对象时的类型,它们之间的耦合度太高了。
为了降低这种耦合度,可以把泛型定义在方法上,这就是泛型方法。

java<T>泛型

 

4、泛型方法

泛型类的问题:带泛型参数的方法,和对象的类型耦合度太高.
泛型方法:把泛型直接定义在方法上.调用方法的时候,确定参数的类型

修饰符 <T> 返回值类型 方法名(){

}

java<T>泛型

严格的调用方式:

  对象.<T>method()

 java<T>泛型

一般情况下调用时可以省略:

  对象.method()

5、泛型方法和泛型类混用看归属

泛型方法有自己的类型参数,泛型类的成员方法使用的是当前类的类型参数。

方法中有<T> 是泛型方法;没有的,称为泛型类中的成员方法。

java<T>泛型

package wang;



class Clazz1<E>{
    public void test1(E e){
        System.out.println(e.getClass());
    } 
    
    public <E> void test2(E e){
        System.out.println(e.getClass());
    } 
    public <T> void test3(T e){
        System.out.println(e.getClass());
    } 
    public <T> void test4(E e){
        System.out.println(e.getClass());
    } 
    
    
    
}
public class GenericDemo4 {
    public static void main(String[] args) {
        Clazz1<String> clazz1=new Clazz1<>();
        clazz1.test1(1);
        
        clazz1.test2(1);
        
        clazz1.test3(1);
        
        clazz1.test4(1);
    }
    
    

}
泛型方法和泛型类归属

相关文章: