1、什么是泛型:泛型其实是在类声明的时候,通过一个标识标识类中某个属性或者是某个方法的返回值及类型参数类型。这样在类的实例化的时候,通过指定其类型就可以了。
格式:泛型类定义===》 【权限】class 类名称 <泛型类型1,泛型类型2...>{ }
泛型对象定义===》 类名称 <具体类> 对象名称 = new 类名称<具体类>();
示例:
class B<T>{
private T val;
public T getVal(){
return val;
}
public void setVal(T val){
this.val = val;
}
}
public class A {
public static void main(String []args) {
B<String> b = new B<String>();
b.setVal("test");
System.out.println(b.getVal().length());
}
}
2、泛型安全警告
如果在实例化对象时,没有设置相应的具体类型,会有泛型警告。但是系统会默认转换为Object类型。上面的代码改成:
B b = new B ();
3、受限泛型:泛型的上界和下界是通过extends和super来实现的。
上界:最大到哪个父类(extends)
class B<T extends String>{
private T val;
public T getVal(){
return val;
}
public void setVal(T val){
this.val = val;
}
}
下界:最少到哪个子类(super)
class B<T super String>{
private T val;
public T getVal(){
return val;
}
public void setVal(T val){
this.val = val;
}
}
3、泛型接口
泛型在接口上有两种实现方式:
a、在子类上定义声明泛型
interface Info<T>{ // 在接口上定义泛型
public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型
}
class InfoImpl<T> implements Info<T>{ // 定义泛型接口的子类
private T var ; // 定义属性
public InfoImpl(T var){ // 通过构造方法设置属性内容
this.setVar(var) ;
}
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
};
b、在子类定义直接写类型
interface Info<T>{ // 在接口上定义泛型
public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型
}
class InfoImpl implements Info<String>{ // 定义泛型接口的子类
private String var ; // 定义属性
public InfoImpl(String var){ // 通过构造方法设置属性内容
this.setVar(var) ;
}
public void setVar(String var){
this.var = var ;
}
public String getVar(){
return this.var ;
}
};
4、泛型方法
5、使用泛型的好处
最大的好处就是在使用集合框架的时候。