以下代码片段取自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>
有人可以帮我理解
cardinalityA = CollectionUtils.<O> getCardinalityMap(a);
的含义是什么?这是某种类型转换吗?<O> Map<O, Integer>
的含义是什么?由于
答案 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的强类型性质所必需的。