Generics angle brackets before static function cal

2020-03-31 03:18发布

问题:

I have always used generics and always seen the angle brackets used like this: Class<Type> (e.g. List<String>).

Today I encountered a generics specification before the call of a static method like: Class.<TypeA, TypeB>staticCall(). The real example is: ImmutableMap.<String, String>builder().

I've never seen this usage and I can't find this specific usage in the documentation. Can someone explain what is going on, please?

回答1:

Those are called Generic Methods.

Before Java 7 you had to specify the type of the Generic reference:

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

Now the compiler infers the type from the context.



回答2:

we can define generics on class level also .

ImmutableMap.Builder means Builder is inner static class here .

and Builder methods will have K and V as arguments means

means instead providing put(String , String) it provides methos like put(K,V) so that any type can be added using put and if you get you need use the same type.

for example if your are calling Builder.Put by passing string , String then in get we can directly assign to String

String val = Bullder.get(K);

it means all methods of ImmutableMap.Builder will work for any class type.

that is the power of generics meaning no need to overlaod methods for different type. just define like below:

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;
}


回答3:

It's signifying multiple types. List only takes one generic type which is why you see

List<String>

From the java docs for Map

At the top you'll see: Interface Map

so it takes two generic types. In the example of your Immutable map, it's saying that the K(ey) is a String and V(alue) is also a String.

In the link you provided, it mentions that this is possible under section,

A Generic Version of the Box Class