15.11 问题

1.任何基本类型都不能作为类型参数

2. 实现参数化接口,一个类不能同时实现同一个泛型接口的两种变体,由于擦除的原因,两个变体会成为相同的接口

interface Payable<T>{}

class Employee implements Payable<Employee>{}

class  Hourly extends Employee implements Payable<Hourly>{}

Hourly不能编译,因为擦除将会Payable<Employee>和Payable<Hourly>j

3.转型和警告

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

T pop(){ return (T)storage[--index];}编译器将对pop()产生“unchecked cast"警告。

4.重载

void f(list<T> v){}

void f(list<w> v){}

会产生编译错误,重载的方法将会产生相同的类型签名

5.基类劫持了接口

public class ComparablePet implements Comparable<ComparablePet>{

  public int compareTo(ComparablePet arg){return 0};


class Cat extends ComparablePet implements Comparable<Cat>{

 public int compareTo(Cat arg){return 0;}

error

6.自限定类型

class SelfBounded<T extends SelfBounded<T>>{

7.古怪的循环泛型

不能直接继承一个泛型参数,可以继承在其自己的定义中使用这个泛型参数的类

8.强制泛型

值限定将采取额外的步骤,强制泛型当作器自己的边界参数来使用

9.参数协变

自限定类型的价值在于他们可以产生协变参数类型-方法参数类型会随参数类型子类而变化,尽管自限定类型还可以产生于子类类型相同的返回类型,这并不十分重要。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值