泛型?与 T 的最终奥义

泛型?与 T 的最终奥义

1.为什么要使用泛型

比如我定义了一个接口,里面的抽象方法类型不确定或者有多种,我需要这样写:

public interface Andayoung{
    String young(String a);
    String young(boolean a);
}

然而我使用泛型可以代表任何类型,这样大大简化了代码:

public interface Andayoung{
    <T> String young(T a);
}
2.你知道泛型 T 与通配符 ? 的区别吗

简单的检索了一下大家的博客,基本上没有谁的博客弄清楚了这个问题,那么我来分析一下:

还是上面的接口,加了一个具有依赖关系的泛型方法,用泛型T来写是这样的:

public interface Andayoung< E >{
    <T> Object anda(Andayoung <T> a);
    <T extends E> String young(Andayoung <T> a);
}

代码块中有两个泛型T和E,其中T继承自E;
然后是通配符?来表示如下:

public interface Andayoung< E >{
    Object anda(Andayoung <?> a);
    boolean String (Andayoung <? extends E> a);
}

我们可以看到代码块中有一个泛型E和一个通配符?;

结合1中的例子我们,得出以下结论:

  1. 我们可以用泛型表示类型T a,但不可以用通配符 ? a。?总是搭配类使用,如 Andayoung<\?> a;(很神奇,不打个转义字符‘\’,MarkDown就把我后面的内容吃掉了)
  2. 如果泛型传入类型形参只使用一次,且仅作用于在调用时传入实参,则使用通配符?足够。
  3. 如果泛型传入类型形参需要表示不同类型参数之间的依赖关系,比如? extends E,则E不能为通配符。
3.最后

遍地都是黄金,只是我们缺乏慧眼。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值