Java 泛型通配符解释

前言
最近看Rxjava retrofit 中到处都是泛型类型定义,不得不重新整理一下资料,简单介绍,满足基本理解使用。

定义什么是泛型?

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。


一 java通配符 <T>,<E>,<K,V>,<?>

使用"<T>"来声明类型持有者名称,自定义泛型类时,类持有者名称可以使用T(Type),如果是容器的元素可以使用E(Element),若键值匹配可以用K(Key)和V(Value)等,若是<?>,则是默认是允许Object及其下的子类,也就是java的所有对象了。

二 泛型类型限制写法上下界
Java上界通配符  <? extends Fruit>
Java 下界通配符  <? super Fruit>
Eg:

上界通配符
public static void upMethod(List<? extends Fruit> list){
//编译报错
//使用通配符后,不能在往集合类中添加元素
//list.add(); //使用通配符后,是可以取出元素的
//所有取出的元素,都是上界父类元素
Fruit fruit = list.get(0);
}

 下界通配符
public static void downMethod(List<? super Fruit> list){
//下界通配符可以往容器内添加元素
//但是有限制,必须是Fruit的子类或者本身,父类是添加不进去的
list.add(new Apple());
//取出元素的类型都为Object
Object object = list.get(0);
} 
class Box<T> {

     private T data;

     public Box() {

     }

     public Box(T data) {
         this.data = data;
     }

     public T getData() {
         return data;
     }

 }

里面所有 T 标识,表示接收外部传递类型参数

Eg: new Box<String>();  new Box( “ 我是泛型T”)
  里面的<T> 表示String类型
泛型方法
不带返回值
public Box(T data) {
         this.data = data;
     }
带返回值
Public T Box(T data) {
        Return data;
     }

Eg:

    public final static <T> Observable<T> create(OnSubscribe<T> f) {
        return new Observable<T>(hook.onCreate(f));
}

这里查看Rxjava泛型方法定义

  public final static <T> Observable<T> create(OnSubscribe<T> f) {
        return new Observable<T>(hook.onCreate(f));
    }
  1. 泛型方法必须加标识
  2. Observable 泛型返回类型
  3. OnSubscribe f 泛型T的类型
  4. f 泛型类型
泛型参数
Box(T data)

说明一下,定义泛型方法时,必须在返回值前边加一个,来声明这是一个泛型方法,持有一个泛型T,然后才可以用泛型T作为方法的返回值。
OnSubscribe的作用就是指明泛型的具体类型,而OnSubscribe类型的变量t,可以用来创建泛型类的对象。
当然,泛型方法不是仅仅可以有一个参数OnSubscribe,可以根据需要添加其他参数。
为什么要使用泛型方法呢?因为泛型类要在实例化的时候就指明类型,如果想换一种类型,不得不重新new一次,可能不够灵活;而泛型方法可以在调用的时候指明类型,更加灵活。

定义泛型方法语法格式如下:

这里写图片描述

调用泛型方法语法格式如下:

这里写图片描述

引用
泛型 http://www.cnblogs.com/iyangyuan/archive/2013/04/09/3011274.html

java泛型 http://www.cnblogs.com/lwbqqyumidi/p/3837629.html

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灯塔@kuaidao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值