泛型类:
[访问权限] class 类名称<泛型类型标识1,泛型类型标识2,...>{
[访问权限] 泛型类型标识 变量名称;
[访问权限] 泛型类型标识 方法名称(){};
[访问权限] 返回值类型声明 方法名称{泛型类型标识 变量名称}{};
}
类名称<具体类> 对象名称 = new 类名称<具体类>();
构造方法上应用泛型
[访问权限] 构造方法 ([<泛型类型> 参数名称]){
}
泛型传参必须匹配(一模一样的类型)
通配符?
可以接收此类型的任意泛型对象
不能设置被泛型指定的内容
受限泛型
设置上限:
类名称<? extends 类> 对象名称
[访问权限] 类名称<泛型标识 extends 类>{}
设置下限:
类名称<? super 类> 对象名称
[访问权限] 类名称<泛型标识 super 类>{}
泛型接口
[访问权限] interface 接口名称<泛型标识>{
}
实现方法:
- 直接在子类之后声明泛型 class Infolmpl implements Info
- 直接在子类的定义声明泛型类型 class Infolmpl implements Info< String > (所有实现了接口的方法中的T全为String)
泛型方法
[访问权限] <泛型标识>泛型标识 方法名称([泛型标识 参数名称])通过泛型方法返回一个泛型类的实例化对象,则必须在方法的返回类型声明处明确地指定泛型标识
public static < T extends Number > Info< T >fun(T param)
要求传入的泛型对象的泛型类型是一致的
public static < T > void add(Info< T >i1,Info< T >i2)
重点
- 泛型可以使程序操作更加安全,避免发生类转换异常。
- 在程序中如果使用类时没有指定泛型,则泛型将被删除,而使用Object接收参数
- 用?接收全部的泛型类型对象
- <? extends 类> 设置上限 <? super 类> 设置下限
- 泛型方法可在泛型类中,也可在普通类中
- 泛型接口的子类要指明具体的泛型类型
- 泛型可嵌套使用
- 标识接口:在程序中定义没有方法的接口