I am learning Java generics and am confused by the method signature. It seems as if people are using it differently in every example I come across.
For example, on the site Baeldung, this is the example they give:
public <T> List<T> fromArrayToList(T[] a) { return Arrays.stream(a).collect(Collectors.toList()); }
And then they go on to say this:
The <T> in the method signature implies that the method will be dealing with generic type T. This is needed even if the method is returning void.
But the <T>
is not required in this example. Why?
class MyGenericClass<T> { T obj; // Why does this function not need <T> before "void"? void add(T obj) { this.obj=obj; } T get() { return obj; } } class Main { public static void main(String args[]) { MyGenericClass<Integer> m_int=new MyGenericClass<Integer>(); m_int.add(2); MyGenericClass<String>mstr=new MyGenericClass<String>(); mstr.add("SoftwaretestingHelp"); System.out.println("Member of MyGenericClass<Integer>:" + m_int.get()); System.out.println("Member of MyGenericClass<String>:" + mstr.get()); } }
What does a generic method signature actually look like? I am seeing many different examples that all look different. When does a method require <T>
before the return type and when does it not?
Advertisement
Answer
In that example, the class is made generic, so T
is specified when you instantiate it. The method is different because it need not be in a generic class.