点运算符`.`(在通用参数之前)是什么意思?

我今天看到这个代码:

ImmutableMap<Class, CommandProcessorInterface> immutableMap = ImmutableMap.<Class, CommandProcessorInterface>of(... 

这个语法是什么意思?

ImmutableMap.<Class ..

我知道仿制药就在课堂名称之后。 没有?

有什么区别:

ImmutableMap<Class..ImmutableMap.<Class..

这意味着您正在调用一个在ImmutableMap类中调用的generics静态方法。

它与您调用static方法几乎相同,嵌套在某个类中:

 SomeClass.staticMethod(); 

对于您的方法定义了类型参数的情况,您可以显式提供generics类型,这样做:

 SomeClass.genericStaticMethod(); 

并回答你最后的问题:

ImmutableMapImmutableMap.什么区别ImmutableMap.

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

通用方法是使用任何generics类型参数声明的方法。 请参阅此处的 doc。 该方法的generics类型不必与声明类的任何generics类型参数相关。 该课程可能是也可能不是通用的。

在调用generics方法(静态或非静态)时,您可以指定generics类型,但通常不会看到它,因为它通常是自动检测的。 您找到的语法是指定它的语法。

如果有一个声明如下的方法:

  void fromArrayToCollection(T[] a, Collection c) { ... 

你可以这样称呼它:

 Integer[] a = ... ArrayList l = ... x.fromArrayToCollection(a, l); 

但如果你有这样的:

  Collection myMethod(int c) { return new ArrayList(c); } 

然后,您有两种方法可以向编译器阐明类型。 您可以通过两种方式为其提供足够的信息。

一个是指定调用中的类型:

 Object c = x.myMethod(5); 

另一种是使用类型转换(通过赋值给变量显式或隐式):

 Collection c = x.myMethod(5); 

它涉及一个静态方法ImmutableMap.of 。 它有自己的generics类型参数。

 class Test { static  T f() { return null; } void t() { String s = Test.f(); // Inferred from LHS. String t = Test.f(); // Not needed. int n = Test.f().length(); // Needed. } 

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