What is the syntax for explicitly giving the type parameters for a generic Java method?
3 Answers
The following is not the syntax
<ArgType>genericMethod() It seems the type arguments must come after a dot as in
SomeClass.<ArgType>genericMethod() this.<ArgType>genericMethod() p.<ArgType>genericMethod() super.<ArgType>genericMethod() SomeClass.super.<ArgType>genericMethod() SomeClass.this.<ArgType>genericMethod() 5 Comments
import static method? It's not attached to a class or this, and as you state the first syntax listed does not work.SomeClass.<ArgType>genericMethod(). If you didn't import the class, then you use the FQN of the class. I'm sure you know this and were hoping for a more satisfying answer. Personally I don't see why the <ArgType>genericMethod() syntax couldn't be added to the language; does it create an ambiguity?import static pack.MyClass.someMethod; someMethod(); to import pack.MyClass; MyClass.<ArgType>someMethod(), but of course it's still more verbose than the "wish this worked" counterexample you give in the answer.According to the Java specification that would be for example:
Collections.<String>unmodifiableSet() (Sorry for asking and answering my own question - I was just looking this up for the third time. :-)
Comments
A good example from java.util.Collection of specifying a generic method which defines its own generic type is Collection.toArray where the method signature looks like:
<T> T[] toArray(T[] a); This declares a generic type T, which is defined on method call by the parameter T[] a and returns an array of T's. So the same instance could call the toArray method in a generic fashion:
Collection<Integer> collection = new ArrayList<Integer>(); collection.add(1); collection.add(2); // Call generic method returning Integer[] Integer[] ints = collection.toArray(new Integer[]{}); // Call generic method again, this time returning an Number[] (Integer extends Number) Number[] nums = collection.toArray(new Number[]{}); Also, see the java tutorial on generic type parameters.