以下2方法签名之间有什么区别:
public <T extends MyClass> Set<T> getMyList() {...}
public Set<? extends MyClass> getMyList() {...}
答案 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();
您希望如何实施第一个?第二个是坏的,因为它强制客户端代码使用通配符。