再读thinking in java -- 第十五章 泛型(三)

本文探讨了Java泛型的特点及限制,包括类无法实现同一泛型的不同接口、泛型擦除导致的转型无效等问题,并介绍了自限定类型、潜在类型机制、泛型异常捕获的不可行性等内容。

一个类不能实现同一个泛型的两种接口,因为存在擦除。

使用带泛型参数的转型或instanceof不会有任何效果。

402页的代码中,T被擦除到它的第一个边界,默认情况下是Object,因此pop()方法实际上是将Object转型为Object。

这里转型其实只是为了符合返回类型T的要求。对于转型其实无效。即使将返回类型改写为Object,最后得到的返回类型也是String。

自己后面补充了代码:

public class solution {
    public static void main(String[] args) {
        generich<String> mh = new generich<>();
        mh.push("1");
mh.show();
        System.out.println(mh.get().getClass().getSimpleName());
    }
}


class generich<T>{
    private Object[] obj;
    public generich(){obj = new Object[5];}
    public Object get(){
        return obj[0];
    }
    public void show(){
        System.out.println(obj[0].getClass().getSimpleName());
    }
    public void push(T factor){
        obj[0]  = factor;
    }

}

在编译阶段已经确定了数据的一致性。

转型可以这样:    List<Widget> lw  = List.class.cast(……)或者是 (List<Widget>)List.class.cast(……),但是不能是List<Widget>.class.cast(……)

ClassName extends Floder<ClassName>本质是基类用导出类代替其参数。该类的对象的参数可以是该类的另一个对象。

自限定限制只能强制作用于继承关系。若使用自限定,则这个类所用的类型参数将与使用这个参数的类具有相同的基类型。实际上就是限定了类的范围。

自限定类型的价值在于他们可以产生协变参数类型——方法参数类型会随子类而变化。

catch不能捕获泛型类型的异常,因为在编译期和运行时都必须知道异常的确切类型。

潜在类型机制使得可以横跨类继承结构,调用不属于某个公共接口的方法。

对缺乏潜在类型机制的补偿:反射:将所有的类型检查都转移到了运行时

设计模式未仔细看,等以后进阶再看,不知道要到什么时候,难受啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值