泛型

泛型:
java5开始出现的一种对Java语言类型的一种拓展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数类型时指定的类型占位符,就好比方法的形式参数是实际参数的占位符一样.(将类型<比如java.lang.String>当作参数传递给一个方法)

定义泛型类

public class Point<T,P> {   //T是一个标示符,代表一个变量类型,调用时可传入一个包装类的类名
/**类型参数规范:推荐使用规范-常见的泛型;泛型只保存在源文件中,class文件中不存在,也就是说在编译阶段就会丢失;基本数据类型不能作为泛型类型;
K   键,比如映射的键  key的类型
V   值,比如Map的值 value类型
E   元素,比如Set<E>  Element表示元素,元素的类型
T   泛型,Type的意思*/
    private T x;    //Q代表调用时传入的数据类型,没有传入参数时,默认为Object
    private P x;

    public void setX(T x) { 
        this.x = x;
    }

    public T getX() {
        return x;
    }
}

使用泛型类

    Point<Double,Integer> p = new Point<Double,Integer>();  //定义具体类型,第二个括号里的参数可不写(7开始)
    p.setX(1.1);
    Double d = p.getX();//已经确定返回的参数是一个Double类型,不需要强转

    Point p = new Point();
    p.setX(1.1);
    Double d = (Double)p.getX();//返回的是一个Object对象,需要强转为Double

泛型的上限与下限
List<?> l 仅表示各种泛型List的父类,并不能把元素添加入集合中;
public void show(List<?> list){} 表示可接受任意类型的List集合作为参数;

List<? extends 类名> 可接受类名及其子类的实例对象作为元素;
List<? super 类名> 可接受类名及其父类的实例对象作为元素;

泛型的的继承

Object obj = new Person();//√
Person<Object> p = new Person<String>();//×

泛型接口及实现方法
public interface IDAO<T>{}
public class DaoImpl<T> implements IDAO<T>{}
public class DaoImpl implements IDAO<String> {}

泛型方法
public static <T>T show (T t ){ return t; }
public static <T>T show (T[] ts ){ return ts[0]; }
public static <T>T show (T...] ts ){ return ts[0]; }

泛型嵌套
Map<String,String> map = new HashMap<>();
Set<Map<String,String> > set = map.entrySet();//将一个已经定义过泛型的Map类作为参数传递给Set的泛型占位符

泛型擦除
Java泛型的处理几乎都在编译器中进行,编译器生成的bytecode是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除,这个过程即类型擦除。

带来的问题:
public void test(List<String> ls){ };public void test(List<Integer> li){ }'方法前面相同,编译会报错;
泛型类的静态变量是共享的;
不需要同时catch同一个泛型异常类的多个实例,
GenericException 和GenericException`
是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值