点运算符`.`(在通用参数之前)是什么意思?
我今天看到这个代码:
ImmutableMap<Class, CommandProcessorInterface> immutableMap = ImmutableMap.<Class, CommandProcessorInterface>of(...
这个语法是什么意思?
ImmutableMap.<Class ..
我知道仿制药就在课堂名称之后。 没有?
有什么区别:
ImmutableMap<Class..
和ImmutableMap.<Class..
这意味着您正在调用一个在ImmutableMap
类中调用的generics静态方法。
它与您调用static
方法几乎相同,嵌套在某个类中:
SomeClass.staticMethod();
对于您的方法定义了类型参数的情况,您可以显式提供generics类型,这样做:
SomeClass.genericStaticMethod();
并回答你最后的问题:
ImmutableMap
和ImmutableMap.
什么区别 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中的通用类型推断变得更加强大。