《Java Generics and Collections》读书笔记四:构造函数,静态成员,嵌套类

 
参考资料:《 Java Generics and Collections
 
 
1. 构造函数
这个没什么好说的,在一个泛型类中,类型参数在类声明的头部声明的,也就是接着class ClassName <T, U>。在定义构造函数时,不需要带上类型参数,函数体中就可以引用类型参数。不过在使用new创建对象时,需要在类名后面带上类型参数,否则将会导致一个未检查(Unchecked)的异常信息。
 
 
2. 静态成员
静态成员最重要的一个特点,就是整个类都共享它。由于Java泛型采用擦除法实现,也就是说一个泛型类,不管任何类型参数,在运行时都拥有相同的class类型,像List<Integer>,List<String>和List<List<Strng>>在运行时的类型都是List。因此,拥有不同类型参数的泛型类,也都共享相同的静态成员。这样一来,静态成员,无论是静态实例域,还是静态方法,都不允许引用该类的类型参数。在调用静态方法,或使用静态变量时,也只能使用ClassName.method()这样的形式,不能带有任何的类型参数。
当然了,静态方法可以声明为泛型方法,就像Collections.addAll()等方法一样,只要不是引用类本身声明的类型参数就可以。
 
 
3. 嵌套类
Java允许一个类嵌套定义在另一个类里面,有内部类,静态内部类以及匿名内部类等多种形式。一般来说,使用比较广泛而且比较有用的就是静态内部类,另外匿名内部类也很方便。与静态成员的规则类似,静态内部类不能引用外部类的类型参数,内部类以及匿名内部类则可以正常引用,其中匿名内部类由于语法的原因,将不能声明自己的类型参数。
public   class  LinkedCollection < E >   extends  AbstractCollection < E >  {
 
private   class  Node {
    
private  E element;
    
private  Node next  =   null ;
    
private  Node(E elt) { element  =  elt; }
 }
 
private  Node first  =   new  Node( null );
 
private  Node last  =  first;
}
class  LinkedCollection < E >   extends  AbstractCollection < E >  {
 
private   static   class  Node < T >  {
    
private  T element;
    
private  Node < T >  next  =   null ;
    
private  Node(T elt) { element  =  elt; }
 }
 
private  Node < E >  first  =   new  Node < E > ( null );
 
private  Node < E >  last  =  first;
}
上面代码演示了在泛型类中使用内部类,静态内部类的不同之处。内部类可以引用外部类的类型参数,所以不需要声明为泛型类了;而静态内部类由于无法引用,只能声明为泛型类,并在创建对象的时候把类型参数传进来。推荐使用后一种,因为静态内部类一般来说会更加简单,也更加高效。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值