我有一个只读方法,应该能够采取
1. Map<Date, List<X>>
或者
2. Map<Date, List<Y>>
作为参数。
在这里,我有以下两个选项来定义该方法。
A. private <T> List<Date> myMethod(Map<Date, List<T>> map)
B. private List<Date> myMethod(Map<Date, List<?>> map)
两者都适合我,哪一个更可取?
谢谢。
第一个使您可以在需要时访问T
类型(例如,如果您需要将某些内容强制转换为类型T
或类似的内容)。对于后者,您只需声明您根本不在乎List
包含什么类型的元素。
来自JLS
<T> boolean addAll(Collection<T> c)
此版本足够灵活,但请注意类型参数在签名中仅使用一次。这反映了一个事实,即类型参数没有用于表达参数类型、返回类型和/或抛出类型之间的任何类型的相互依赖关系。在没有这种相互依赖的情况下,泛型方法被认为是不好的风格,通配符是首选。