【部分内容来自网络,侵删】
泛型
泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,
操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
泛型方法
<泛型声明> 返回值类型 方法名(泛型 变量名){
...
}
public class Demo1 {
public static <T> T method (T obj){
return obj;
}
}
泛型类
class 类名称 <泛型标识>{
private 泛型标识 var;
...
}
public class Demo2<T> {
private T attr;
public Demo2(T attr) {
super();
this.attr = attr;
}
public T getAttr() {
return attr;
}
public void setAttr(T attr) {
this.attr = attr;
}
}
泛型接口
//定义一个泛型接口
public interface Generator<T> {
public T next();
}
泛型通配
- 通配符(?)
上面有泛型的定义和赋值;当在赋值的时候,上面一节说赋值的都是为具体类型,当赋值的类型不确定的时候,我们用通配符(?)代替了。 - 上边界通配<? extends E>
使用固定上边界的通配符的泛型, 就能够接受指定类及其子类类型的数据. 要声明使用该类通配符, 采用<? extends E>的形式, 这里的E就是该泛型的上边界. - 下边界通配<? super E>
使用固定下边界的通配符的泛型, 就能够接受指定类及其父类类型的数据. 要声明使用该类通配符, 采用<? super E>的形式, 这里的E就是该泛型的下边界.