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

展开全部

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

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

例如下面这个两个方法表达的意思是一样的,都表示参数是一个集合,这个集合可能包含着A或者A的任何子类public void someMethod(List extends A> list);

public void someMethod(List list);

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

// 前面定义了T,后面参数就可以用T表示了

public void some(List t);

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

// 一个A类或者A子类的变量

private T a;

// 一个方法

public void some(List list);

}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: <? extends Father> 这种写法的意思是,List 可以存放 Father 类及其子类的对象,而 Father 类型的对象则不能存放进去。 这个写法可以让 List 变得更加灵活,可以存放任意 Father 类型及其子类的对象,比如 Father 的子类 Son、GrandSon 等等。 ### 回答2: 在Java的泛型,List<? extends Father>这样写的用途是为了使List能够接受Faher类及其子类的对象。?表示一个不确定的类型,而extends关键字限定了该类型必须是Father类或其子类。 使用List<? extends Father>的好处是能够提供更大的灵活性和可复用性。例如,假设有一个List<? extends Number>的列表,我们可以将其赋值为一个List<Integer>或List<Double>的对象,这样做可以使该列表接受更多不同类型的Number及其子类的对象。 另一个好处是能够实现协变。在Java,数组是不可协变的,即不能将Integer数组赋值给Number数组。但是,使用List<? extends Father>创建的列表可以实现协变,即可以将List<Father>赋值给List<? extends Father>。这样做的好处是可以在方法参数接受更多不同类型的Father及其子类的对象。 然而,使用List<? extends Father>也有一些限制。由于不确定具体的类型是Father的哪个子类,只能读取元素,而不能修改或添加元素。因为无法确定具体的类型是什么,所以在编译时期无法确定是否为合法的操作。这是为了保证类型安全和类型一致性。 综上所述,使用List<? extends Father>的好处在于提供了更大的灵活性和可复用性,实现了协变,同时也限制了对元素的修改和添加操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值