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