关于Java中泛型的查询

关于Java中泛型的查询,java,generics,Java,Generics,我有一个只读方法,应该可以 1. Map<Date, List<X>> 1。地图 或 2。地图 作为一个参数 在这里,我有以下两个选项来定义该方法 A. private <T> List<Date> myMethod(Map<Date, List<T>> map) B. private List<Date> myMethod(Map<Date, List<?>> map) A.私有

我有一个只读方法,应该可以

1. Map<Date, List<X>>
1。地图

2。地图
作为一个参数

在这里,我有以下两个选项来定义该方法

A. private <T> List<Date> myMethod(Map<Date, List<T>> map)
B. private List<Date> myMethod(Map<Date, List<?>> map)
A.私有列表myMethod(Map)

B.private List myMethod(Map第一个方法允许您访问
T
类型,以备需要(例如,如果您需要将某个类型转换为
T
或类似的类型)。对于后者,您只需声明您根本不知道
List
包含什么类型的元素。

boolean addAll(集合c)
此版本足够灵活,但请注意,类型参数在签名中仅使用一次。这反映了类型参数不用于表示参数类型之间的任何类型的相互依赖关系,返回类型和/或抛出类型。在没有这种相互依赖性的情况下,泛型方法被认为是不好的样式,而通配符是首选。


我明白了,所以如果我不关心这个值集,我还不如将我的方法声明为myMethod(Map)是吗?是的,如果你根本不在乎这些值是否是列表。@ManishMulani:如果以后你发现
X
Y
有一些共同的接口/祖先,你可以将你接受的泛型限制为
。如果你真的只接受这些类型是因为它们有共同点,而其他类型没有。所以这是有道理的。@MichaelLaffargue:你说得对,我删除了我恶意的旁注:)@ManishMulani:如果你不在乎我推荐的值类型的话?。它将您的方法(管理映射)与您具有列表类型的值这一事实分离。你的方法需要知道的越少(以正确的方式)就越好。
A. private <T> List<Date> myMethod(Map<Date, List<T>> map)
B. private List<Date> myMethod(Map<Date, List<?>> map)
<T> boolean addAll(Collection<T> c)