十九、泛型

泛型

作用:可以解决数据类型的安全性问题
怎么说呢,所有类都可以向上转型为Object,但是真正用的时候就可以类型转错了。但是如果定义泛型就不会有这个问题。
比如Point《String》 p = new Point《String》()
这样只能输入字符串类型

泛型类定义格式

class 类《T》 {
修饰符 《T》 属性;
public 《T》 getter() ;

}

通过构造方法设置内容

class Point {  
    private T var  
    public Point(T var){  
        this.var = var
    }

}

定义多个泛型

class Point{    
    private T var;
    private K key;
}  

泛型的安全警告

在泛型应用中最好在声明类对象的时候指定好其内部的数据类型
如“Info”,如果未指定泛型,会将T设置为Object类型,这样就可以接受所有类型

通配符?

使用?可以接收任意的内容,但是此内容却无法修改
示例代码:

Info> i = new Info()  
i.setVar("nihao") //会报错  

受限泛型,方法和类都可以使用

《T extends Info》 :只能是Info或者其子类

泛型与子类继承的限制

一个类的子类可以通过对象多态性,为其父类实例化,但是在泛型操作中,子类的泛型类型是无法使用父类的泛型类型接受。
例如:Info不能使用Info
假设Info是一件商品,Info是全部商品

泛型其他应用

泛型接口的定义

interface Info {
    public T getVar()
}

泛型接口实现的两种方式

第一种: 示例代码

class InfoImpl implements Info{

}

第二种:

class InfoImpl implements Info{
}

泛型方法

跟类是不是泛型类没关系
示例代码:

class Demo{  
    public  T fun(T t){
        return t;
    }
}  
可以看着声明T是什么  

通过泛型方法返回泛型类的实例

public static  Info fun(){
    Info temp = new Info()
    temp.setVar(param)
    return temp
}

泛型数组

public static  void fun2(T param[]){
    for(T t:param){}
}  

使用 fun2(Integer i[])

泛型的嵌套使用

Demo> d = null
Info i = null
i = new Info("wold",11)
d = new Demo>(i)