泛型讲解

70 阅读2分钟

1、泛型类、接口

1.1 泛型类

使用语法

类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>();

在java1.7以后,后面的<>中的具体的数据类型可以省略不写。

1.2 泛型接口

泛型接口的使用语法

interface 接口名称<泛型标识, 泛型标识,...> { 泛型标识 方法名() }

泛型接口的使用

1、实现类不是泛型类,接口要明确数据类型

2、实现类也是泛型类,实现类和接口的泛型类型要一致

1.3 泛型方法

泛型类,是在实例化类的时候指明泛型的具体类型

泛型方法,是在调用方法的时候指明泛型的具体类型

泛型方法的语法

修饰符 <T,E> 返回值类型 方法名(形参列表){方法体}

说明:

1、public与返回值中间非常重要,可以理解为声明此方法的微泛型方法

2、只有声明了的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法

3、 表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T

4、与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T,E等形式参数常用于标识泛型


package generic;  
  
import java.util.ArrayList;  
import java.util.List;  
import java.util.Random;  
  
public class Test {  
public static void main(String[] args) {  
    String demo = "demo";  
    get1(demo);  
    get2(demo);  
    get3(demo);  
    get4(demo);  
}  
  
public static <T> T get1(String str) {  
    Dog dog = new Dog();  
    return (T)dog;  
}  
  
public static <T> T get2(T str) {  
    Dog dog = new Dog();  
    return (T)dog;  
}  
  
public static <T extends Animal> T get3(String str) {  
    Dog dog = new Dog();  
    return (T)dog;  
}  
  
public static <T extends Animal> T get4(T str) {  
    Dog dog = new Dog();  
    return (T)dog;  
}  
}

上面写了几个泛型方法,get1()方法里的T按理说需要调用方传入的时候确定类型,但是这里传入的是String类型,所以这里表示Object类型,get2()方法中T表示String类型,get3()方法中做了限定,所以此时的T是Animal类型,get4()方法中对T做了限定,但是传入的是Stirng类型,所以是错误的。返回值均做了强制类型转化,我理解是为了限定返回的类型