静态函数调用之前的泛型尖括号[英] Generics angle brackets before static function call

问题描述

我一直使用仿制药,并且总是看到像这样使用的角度括号:Class<Type>(例如List<String>).

今天,我在静态方法的调用之前遇到了仿制药规范:Class.<TypeA, TypeB>staticCall().真正的例子是:ImmutableMap.<String, String>builder().

我从未见过此用法,在文档.有人可以解释发生了什么吗?

推荐答案

这些被称为通用方法.

Java 7之前,您必须指定通用参考的类型:

Util.<Integer, String>compare(p1, p2);

现在,编译器从上下文中输入类型.

其他推荐答案

我们也可以在类级别上定义通用物.

immutableMap.builder表示建筑商在这里是内部静态类.

和构建器方法将具有k和v,作为参数表示

表示提供put(string,string),它提供了像put(k,v)之类的methos,以便可以使用put添加任何类型,如果您得到的,则需要使用相同的类型.

例如,如果您正在调用builder.通过传递字符串,然后在Get中直接分配到字符串

字符串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;
}

其他推荐答案

它表示多种类型.列表仅采用一种通用类型,这就是为什么您看到

List<String>

来自 map

在顶部您会看到: 接口图

因此,它需要两个通用类型.在您不变的地图的示例中,说k(ey)是字符串,v(alue)也是字符串.

在您提供的链接中,它提到这是根据节的,

的.

框类的通用版本

本文地址:https://www.itbaoku.cn/post/978597.html