方法声明中的Java泛型

时间:2012-02-28 20:00:18

标签: 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
    }

我在Joshua Bloch关于UserGroupsAtGoogle的演讲中看到了这段代码 链接:http://www.youtube.com/watch?v=V1vQf4qyMXg

我想知道这个<T>putFavorite方法的方法声明中意味着什么。 我假设,这不是返回值,因为这已经是void

2 个答案:

答案 0 :(得分:10)

你是对的,它不是返回值,<T>声明一个名为T的泛型类型,然后将在此方法的签名中使用。对于调用该方法的客户端,他们必须确保它们传入的参数满足签名,这样T在所有参数中都是一致的(并且在某些情况下返回值)。

调用该方法的一些有效方法是:

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

等。

有关更详细的说明,请参阅this page

答案 1 :(得分:0)

是一个类型参数,由上面示例中的参数替换。这是一个相关的常见问题:http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ001