【问题标题】:Java Method signature with generic return class具有通用返回类的 Java 方法签名
【发布时间】:2010-12-03 18:48:13
【问题描述】:
以下2个方法签名有什么区别:
public <T extends MyClass> Set<T> getMyList() {...}
public Set<? extends MyClass> getMyList() {...}
【问题讨论】:
标签:
java
methods
generics
declaration
signature
【解决方案1】:
在第一个中,T 可以在方法主体中访问,而在第二个中则不是。这是否有用取决于方法的工作。
【解决方案2】:
对于第一个,您可以将其用作:
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();
您希望如何实施第一个?第二个不好,因为它强制客户端代码使用通配符。