Him*_*huR 6 java generics collections arraylist
Arraylist with List<interfaceI>和List<? extends InterfaceI>both都有实现interfaceI的类对象.那什么时候应该用?
假设Foo并且Bar是两个类实现InterfaceI.
第二个(List<? extends InterfaceI>)不允许向列表添加任何内容(null除外),因为列表包含的类型是未知的:它可能是a List<Foo>或a List<Bar>:你只是不知道.
因此,当您希望方法读取作为参数传递的列表元素并希望调用者能够使用a ,a 或a 调用方法时, 通常将此表示法用于方法参数.使用as参数只接受类型列表.List<InterfaceI>List<Foo>List<Bar>List<InterfaceI>List<InterfaceI>
让我们举一个具体的例子:你想要计算一个数字列表的最大双精度值.这种方法不需要在列表中添加或设置任何内容.它只是迭代元素,获取每个数字并计算它们的最大值.签名可以是
public double max(List<Number> list);
Run Code Online (Sandbox Code Playgroud)
但是,你将无法做到
List<Integer> ints = new ArrayList<>();
max(ints);
Run Code Online (Sandbox Code Playgroud)
调用此方法的唯一方法是执行此操作
List<Number> ints = new ArrayList<>();
max(ints);
Run Code Online (Sandbox Code Playgroud)
而如果您将方法声明为
public double max(List<? extends Number> list);
Run Code Online (Sandbox Code Playgroud)
那么你可以做到
List<Integer> ints = new ArrayList<>();
List<Long> longs = new ArrayList<>();
max(ints);
max(longs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |