列表与列表<?在java中扩展InterfaceI>

前端之家收集整理的这篇文章主要介绍了列表与列表<?在java中扩展InterfaceI>前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
列表< interfaceI>的Arraylist和列表<?扩展InterfaceI>两者都有实现interfaceI的类对象.那什么时候应该用?

解决方法

假设Foo和Bar是实现InterfaceI的两个类.

第二个(List<?extends InterfaceI>)不允许向列表添加任何内容(null除外),因为列表包含的类型是未知的:它可以是List< Foo>或者列表< Bar>:你只是不知道.

因此,当您希望方法读取作为参数传递的列表元素时,通常将此表示法用于方法参数,并希望调用者能够使用List< InterfaceI>,List< Foo>调用您的方法.或列表< Bar>.使用List< InterfaceI>因为参数只接受List< InterfaceI>类型的列表.

让我们举一个具体的例子:你想要计算一个数字列表的最大双精度值.这种方法不需要在列表中添加或设置任何内容.它只是迭代元素,获取每个数字并计算它们的最大值.签名可以是

@H_404_12@public double max(List<Number> list);

但是,你将无法做到

@H_404_12@List<Integer> ints = new ArrayList<>(); max(ints);

调用方法的唯一方法是执行此操作

@H_404_12@List<Number> ints = new ArrayList<>(); max(ints);

而如果您将方法声明为

@H_404_12@public double max(List<? extends Number> list);

那么你可以做到

@H_404_12@List<Integer> ints = new ArrayList<>(); List<Long> longs = new ArrayList<>(); max(ints); max(longs)

猜你在找的Java相关文章