apache-commons colectionutils源代码

时间:2013-01-30 13:59:51

标签: java generics apache-commons apache-commons-collection

以下代码片段取自Commons框架的CollectionUtils.java文件:

private static class CardinalityHelper<O> {
    final Map<O, Integer> cardinalityA, cardinalityB;

    public CardinalityHelper(final Iterable<? extends O> a,
            final Iterable<? extends O> b) {
        cardinalityA = CollectionUtils.<O> getCardinalityMap(a);
        cardinalityB = CollectionUtils.<O> getCardinalityMap(b);
    }

    public final int max(final Object obj) {
        return Math.max(freqA(obj), freqB(obj));
    }

    public final int min(final Object obj) {
        return Math.min(freqA(obj), freqB(obj));
    }

    public int freqA(final Object obj) {
        return getFreq(obj, cardinalityA);
    }

    public int freqB(final Object obj) {
        return getFreq(obj, cardinalityB);
    }

    private final int getFreq(final Object obj,
            final Map<?, Integer> freqMap) {
        final Integer count = freqMap.get(obj);
        if (count != null) {
            return count.intValue();
        }
        return 0;
    }
}

getCardinalityMap返回<O> Map<O, Integer> 有人可以帮我理解

  1. cardinalityA = CollectionUtils.<O> getCardinalityMap(a);的含义是什么?这是某种类型转换吗?
  2. 返回类型<O> Map<O, Integer>的含义是什么?
  3. 这个伎俩叫什么?
  4. 由于

1 个答案:

答案 0 :(得分:2)

  

1)cardinalityA = CollectionUtils是什么。 getCardinalityMap(一);手段?这是某种类型转换吗?

这不是类型转换。它是显式设置泛型方法的泛型参数。 CardinalityHelper具有通用参数<O>,您可以从声明中看到:

private static class CardinalityHelper<O> {

CardinalityHelper的客户使用此类是类型安全的方式。

  

2)返回类型<O> Map<O, Integer>的含义是什么?

- 通用参数声明。 地图 - 返回类型。

  

3)这个伎俩叫什么?

正在使用Java Generic methods

您还可以在标准JDK库中找到类似用法。例如:java.util.Collections.sort(java.util.List)

Metaprogramming原则的Java实现非常有限,因此您只能使用Generic Type参数来创建类型安全容器,这是Java的强类型性质所必需的。