泛型(T)
一、认识泛型
(1)JDK1.5版本推出(若低于该版本,需要1.5及更高的版本)
(2)原理:在类声明中,通过一个标识(通常为T),表示类中某个属性的类型或某个方法的返回值及参数类型。
(3)功能:通过泛型创建各种各类型安全的类、接口和方法。
意思是在定义类、接口、方法、方法参数或成员变量时先定其操作对象为通用类型(任意数据类型);在使用时再将通用类型转换成指定的数据类型。
语法:Class 类名<泛型,泛型…>{}
(4)在没有泛型时,我们使用Obeject类型来进行多种类型数据的操作。当需要使用不用数据类型时,显式地对Obeject类进行数据的强制转换来实现操作。缺点:若转换错误,编译不报错,执行时出行java.lang.ClassCastException异常。
对比,我直接写实例化和调用方法:
//定义DataType1类的一个Integer版本
DataType1 intOb1=new DataType1(new Integer(99));
intOb1.showType(); //调用方法
int i1=(Integer)intOb1.getOb(); //强制转换
//定义DataType2类的一个Integer版本
DataType2<Integer>intOb2=new DataType2<Integer>(new Integer(99));
intOb2.showType();
int i2=intOb2.getOb();
二、认识泛型。
1.构造方法中使用泛型
class Con<T>{
private T value;
public Con(T value) {
this.value=value;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
public class GenericDemo {
public static void main(String[] args) {
Con<String> c=new Con<String>("构造方法中使用泛型");
System.out.println(c.getValue());
}
}
2.多个泛型
class Gen<K,T>{}
3.泛型接口
格式:interface 接口名称<泛型标识>{}
class 类名<T> implements 接口名<T>{}
也可以把实现泛型接口的具体子类定义成特定类型的子类,该子类不再是泛型类接口。
class 类名<T> implements 接口名<Integer>{}
4.泛型方法
public <T>T tell(T t){}
public static <T>T getMiddleValue(T[] arrs){}
5.通配符(?)
当使用泛型类或接口声明属性、局部变量、参数类型或返回值类型时,可以使用通配符来代替类型参数,如定义某类型List为参数的某计算类。
6.泛型数组(下次补充)
三、泛型的局限
(1)不能使用基本类型的类型参数。
(2)静态成员无法使用类型参数。
(3)不能使用泛型类异常。
(4)不能使用泛型数组。
(5)不能实例化参数类型对象。