在java中,〈?extends A 〉与〈T extends A〉有什么区别?

这是泛型嘛,泛型简单的意思就是说,你不知道你想要的这个类具体是啥,但是你可以知道这个类的相关子类或者父类


所以从上面的观点来看,<? extends A> 和 <T extends A>是没啥区别的

例如下面这个两个方法表达的意思是一样的,都表示参数是一个集合,这个集合可能包含着A或者A的任何子类

1
2
public  void  someMethod(List<?  extends  A> list);
public  void  someMethod(List<T  extends  A> list);

这是一种情况,但是相比而言,一个类中,多处方法都需要这个泛型的时候,<T extends A>要比<? extends A> 方便的多,就像在代码里,你声明了一个变量后,你就可以在这个变量的代码块里任何地方调用,同理<T extends A>就像是声明了一个泛型变量T,这个T是一个A或者A的子类,然后这个变量T在所能用的范围之内,你都可以直接用T表示,不用再写<? extends A>或者<T extends A>,比如:


1
2
// 前面定义了T,后面参数就可以用T表示了
public  <T  extends  A> void  some(List<T> t);

上面是方法里,这个范围比较窄,放在类里,效果更明显,比如:

1
2
3
4
5
6
7
public  class  B<T  extends  A>{
     // 一个A类或者A子类的变量
     private  T a;
     
     // 一个方法
     public  void  some(List<T> list);
}

所以可以看到,差别也不太大

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值