0

以下代码片段取自 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 回答 1

2

1) cardinalityA = CollectionUtils. getCardinalityMap(a); 方法?这是某种类型转换吗?

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

private static class CardinalityHelper<O> {

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

2)返回类型是什么<O> Map<O, Integer>意思?

- 通用参数声明。 映射- 返回类型。

3)这个技巧叫什么?

它使用Java 通用方法

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

元编程原则的Java 实现非常有限,因此您只能使用泛型类型参数来创建类型安全的容器,这是 Java 的强类型特性所要求的。

于 2013-01-30T14:06:30.797 回答