点运算符 “.”(在泛型参数之前)是什么意思?

2022-09-02 03:03:31

我今天看到了这个代码:

    ImmutableMap<Class<? extends ClientCommand>, CommandProcessorInterface> immutableMap =
            ImmutableMap.<Class<? extends  ClientCommand>, CommandProcessorInterface>of(...

此语法是什么意思?

ImmutableMap.<Class ..

我知道泛型紧跟在类名之后。不?

有什么区别:

ImmutableMap<Class..ImmutableMap.<Class..


答案 1

这意味着您正在调用在类中调用的泛型静态方法。ofImmutableMap

这几乎与你调用一个嵌套在某个类中的方法相同:static

SomeClass.staticMethod();

对于方法定义了类型参数的情况,可以显式提供泛型类型,如下所示:

SomeClass.<Type>genericStaticMethod();

回答你的最后一个问题:

和 有什么区别?ImmutableMap<Class...>ImmutableMap.<Class...

第一个通常在创建泛型类的实例时使用。它用于在类级别定义泛型类型,而第二个用于调用嵌套在某个类中的泛型静态方法。


答案 2

它涉及静态方法 。这有自己的泛型类型参数。ImmutableMap.of

class Test {

static <T> T f() { return null; }

void t() {
    String s = Test.f();                 // Inferred from LHS.
    String t = Test.<String>f();         // Not needed.
    int n = Test.<String>f().length();   // Needed.
}

在你的情况下,它似乎不是真的需要,但是我在那里如履薄冰,因为通用类型推断在Java 8中变得更加强大。