一个类不能实现同一个泛型的两种接口,因为存在擦除。
使用带泛型参数的转型或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不能捕获泛型类型的异常,因为在编译期和运行时都必须知道异常的确切类型。
潜在类型机制使得可以横跨类继承结构,调用不属于某个公共接口的方法。
对缺乏潜在类型机制的补偿:反射:将所有的类型检查都转移到了运行时
设计模式未仔细看,等以后进阶再看,不知道要到什么时候,难受啊