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类型,所以是错误的。返回值均做了强制类型转化,我理解是为了限定返回的类型