我一直使用泛型,并且总是看到使用的尖括号:Class<Type>
(例如List<String>
)。
今天我在调用静态方法之前遇到了泛型规范,例如:Class.<TypeA, TypeB>staticCall()
。真实的例子是:ImmutableMap.<String, String>builder()
。
我从未见过这种用法,我在documentation中找不到这种具体用法。有人可以解释一下发生了什么吗?
答案 0 :(得分:1)
这些被称为Generic Methods。
在Java 7之前,您必须指定通用引用的类型:
Util.<Integer, String>compare(p1, p2);
现在编译器从上下文中推断出类型。
答案 1 :(得分:0)
我们也可以在类级别定义泛型。
ImmutableMap.Builder意味着Builder在这里是内部静态类。
和Builder方法将K和V作为参数意味着
意味着提供put(String,String)它提供像put(K,V)这样的方法,这样任何类型都可以使用put添加,如果你需要使用相同的类型。
例如,如果你通过传递字符串调用Builder.Put,那么在get中我们可以直接分配给String
String val = Bullder.get(K);
这意味着ImmutableMap.Builder的所有方法都适用于任何类类型。
这是泛型的力量,意味着不需要为不同类型重叠方法。 只需定义如下:
public Builder<K, V> put(K key, V value) {
ensureCapacity(size + 1);
ImmutableMapEntry<K, V> entry = entryOf(key, value);
// don't inline this: we want to fail atomically if key or value is null
entries[size++] = entry;
return this;
}
答案 2 :(得分:-1)
它表示多种类型。列表只采用一种通用类型,这就是你看到的原因
List<String>
来自Map
的java文档在顶部你会看到: 界面图
因此需要两个generic types。在你的不可变映射的例子中,它说K(ey)是一个字符串而V(alue)也是一个字符串。
在您提供的链接中,它提到这可以在部分
下进行Box类的通用版本