0

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

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

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

2 回答 2

3

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

于 2010-12-03T18:52:05.000 回答
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();

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

于 2010-12-03T19:06:01.417 回答