以下2种方法签名有什么区别:
public <T extends MyClass> Set<T> getMyList() {...}
public Set<? extends MyClass> getMyList() {...}
以下2种方法签名有什么区别:
public <T extends MyClass> Set<T> getMyList() {...}
public Set<? extends MyClass> getMyList() {...}
在第一个中,T
可以在方法主体中访问,而在第二个中则不是。这是否有用取决于方法的工作。
对于第一个,您可以将其用作:
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();
您希望如何实施第一个?第二个不好,因为它强制客户端代码使用通配符。