加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

聊一聊Java 泛型全解

发布时间:2019-08-29 20:15:00 所属栏目:建站 来源:来一杯82年的Java
导读:副标题#e# 对于java的泛型我一直属于一知半解的,平常真心用的不多。直到阅读《Effect Java》,看到很多平常不了解的用法,才下定决心,需要系统的学习,并且记录下来。 1、泛型的概述: 1.1 泛型的由来 根据《Java编程思想》中的描述,泛型出现的动机: 有

2.4 源码中泛型的使用,下面是List接口和ArrayList类的代码片段。

  1. //定义接口时指定了一个类型形参,该形参名为E 
  2. public interface List<E> extends Collection<E> { 
  3.  //在该接口里,E可以作为类型使用 
  4.  public E get(int index) {} 
  5.  public void add(E e) {}  
  6. //定义类时指定了一个类型形参,该形参名为E 
  7. public class ArrayList<E> extends AbstractList<E> implements List<E> { 
  8.  //在该类里,E可以作为类型使用 
  9.  public void set(E e) { 
  10.  ....................... 
  11.  } 

2.5 泛型类派生子类

父类派生子类的时候不能在包含类型形参,需要传入具体的类型

错误的方式:

  1. public class A extends Container {} 

正确的方式:

  1. public class A extends Container {} 

也可以不指定具体的类型,系统就会把K,V形参当成Object类型处理

  1. public class A extends Container {} 

2.6 泛型构造器

构造器也是一种方法,所以也就产生了所谓的泛型构造器。

和使用普通方法一样没有区别,一种是显示指定泛型参数,另一种是隐式推断

  1. public class Person { 
  2.  public <T> Person(T t) { 
  3.  System.out.println(t); 
  4.  } 
  5.   

使用:

  1. public static void main(String[] args) { 
  2.  new Person(22);// 隐式 
  3.  new <String> Person("hello");//显示 

特殊说明:

如果构造器是泛型构造器,同时该类也是一个泛型类的情况下应该如何使用泛型构造器:因为泛型构造器可以显式指定自己的类型参数(需要用到菱形,放在构造器之前),而泛型类自己的类型实参也需要指定(菱形放在构造器之后),这就同时出现了两个菱形了,这就会有一些小问题,具体用法再这里总结一下。 以下面这个例子为代表

  1. public class Person<E> { 
  2.  public <T> Person(T t) { 
  3.  System.out.println(t); 
  4.  } 

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读