2012-09-13 31 views
2

泛型查询,我应该能够只读方式采取任何关于Java的

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) 

这两个工作对我来说很好,哪一个更好?

谢谢。

回答

5

第一个例子让你能够访问T类型,以防万一你需要(例如,如果你需要投入某些东西来键入T或类似的东西)。有了后者,你只需说明你不会给出该List包含哪些元素。

+0

是的。更正它。谢谢。 –

+1

我明白了,所以如果我不关心价值集合,那么我最好还是将我的方法声明为myMethod(Map )吧? –

+0

是的,如果你甚至不关心值是否是列表。 –

5

JLS

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

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