2

我有一个只读方法,应该能够采取

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)

两者都适合我,哪一个更可取?

谢谢。

4

2 回答 2

5

第一个使您可以在需要时访问T类型(例如,如果您需要将某些内容强制转换为类型T或类似的内容)。对于后者,您只需声明您根本不在乎List包含什么类型的元素。

于 2012-09-13T07:43:16.813 回答
5

来自JLS

<T> boolean addAll(Collection<T> c)

此版本足够灵活,但请注意类型参数在签名中仅使用一次。这反映了一个事实,即类型参数没有用于表达参数类型、返回类型和/或抛出类型之间的任何类型的相互依赖关系。在没有这种相互依赖的情况下,泛型方法被认为是不好的风格,通配符是首选。

于 2012-09-13T07:55:11.377 回答