I saw this code today:
ImmutableMap<Class<? extends ClientCommand>, CommandProcessorInterface> immutableMap =
ImmutableMap.<Class<? extends ClientCommand>, CommandProcessorInterface>of(...
What does this syntax mean?
ImmutableMap.<Class ..
I knew generics was right after the class name. No?
What is the difference between:
ImmutableMap<Class..
and ImmutableMap.<Class..
It means you're invoking a generic static method, called of
in the ImmutableMap
class.
It's pretty much the same as you're invoking a static
method, nested in some class:
SomeClass.staticMethod();
For the cases when your method has a type-parameter defined, you can explicitly provide the generic type and this is done like this:
SomeClass.<Type>genericStaticMethod();
And to answer you final question:
What is the difference between
ImmutableMap<Class...>
andImmutableMap.<Class...
?
The first is usually used when creating an instance of a generic class. It's used to define the generic-type on class level, while the second is used to invoke a generic static method that's nested in some class.