6 java generics collections list map
有没有办法以类型安全的方式进行以下实现?
public void myMethod( Map<String, ? extends List<String>> map )
{
map.put("foo", Collections.singletonList("bar");
}
Run Code Online (Sandbox Code Playgroud)
上述实现不起作用.它需要一个正确Map<String, ? super List<String>>
编译方法map.put()
.但myMethod不会以这种方式接受List的任何子类型.所以,我必须Map<String, ? extends List<String>>
改用.如何以类型安全的方式解决此问题?
Kit*_*YMG 20
public void myMethod( Map<String, List<String>> map ) {
map.put("foo", Collections.singletonList("bar") );
}
Run Code Online (Sandbox Code Playgroud)
你不能把一个List
的(返回类型Collections.singletonList()
到Map
的? extends List
,因为实际的类型可能是任何实现List
.例如,它是不是安全的把一个普通的List
成Map<String,LinkedList>
因为List
可能不是LinkedList
.不过,我们可以很容易地把一LinkedList
成Map
的<String,List>
.
我想你已经在考虑你的仿制药了.您不必使用? extends
非泛型类.例如,List<Object>
将保持任何Object
,? extends
不需要添加对象.A List<List<Foo>>
只会获取List<Foo>
对象而不是List<FooSubclass>
对象[通用类不会根据其参数继承].这是? extends
发挥作用的地方.同时添加List<Foo>
并List<FooSubclass>
到List
,该类型必须是List<List<? extends Foo>>
.
归档时间: |
|
查看次数: |
17791 次 |
最近记录: |