Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Generics in Method Declaration

Tags:

java

generics

   private Map<Class<?>, Object> favorites = new HashMap<Class<?>, Object>();

    public <T> void putFavorite(Class<T> type, T instance) {
        //code to put the T Object in the Map
    }

I saw this code in a talk from Joshua Bloch on UserGroupsAtGoogle
link: http://www.youtube.com/watch?v=V1vQf4qyMXg

I wonder what this <T> means in the method declaration of the putFavorite method.
I assume, this is not the return value, because this is already void.

like image 733
Jan Koester Avatar asked Jun 04 '26 22:06

Jan Koester


1 Answers

You're right, it's not the return value, the <T> is declaring a generic type named T which will then be used in the signature of this method. For a client calling the method, they have to make sure the arguments they pass in satisfy the signature, such that T is consistent across all arguments (and return value in some cases).

Some valid ways to call the method would be:

putFavorite(String.class, "Some string");
putFavorite(Integer.class, Integer.valueOf(1234));
putFavorite(SomeClass.class, new SomeClass());

etc..

See this page for a more detailed explanation.

like image 117
driangle Avatar answered Jun 07 '26 11:06

driangle