查询Java中的泛型

时间:2012-09-13 07:41:03

标签: java generics

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

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)

对我来说两者都合适,哪一个更好?

感谢。

2 个答案:

答案 0 :(得分:5)

第一个允许您访问T类型以备不时之需(例如,如果您需要投射某些内容以键入T或类似内容)。对于后者,您只需声明您不会错误地List包含哪种元素。

答案 1 :(得分:5)

来自JLS

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

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