具有泛型返回类的Java方法签名

时间:2010-12-03 18:48:14

标签: java methods generics declaration signature

以下2方法签名之间有什么区别:

public <T extends MyClass> Set<T> getMyList() {...}

public Set<? extends MyClass> getMyList() {...}

2 个答案:

答案 0 :(得分:3)

在第一个中,T可以在方法体中访问,而在第二个中则不可以。这是否有用取决于方法的工作。

答案 1 :(得分:1)

对于第一个,您可以将其用作:

Set<MyClass> set = thing.getMyList();
Set<MyDerivedClass> set = thing.getMyList();
Set<?> set = thing.getMyList();
Set<? extends MyClass> set = thing.getMyList();
Set<? extends MyDerivedClass> set = thing.getMyList();

对于第二个,你更受限制:

Set<?> set = thing.getMyList();
Set<? extends MyClass> set = thing.getMyList();

您希望如何实施第一个?第二个是坏的,因为它强制客户端代码使用通配符。