【发布时间】:2011-10-25 00:04:18
【问题描述】:
我有以下课程。
class MyClass<T>
它使用以下构造函数。
MyClass(Comparator<T> comparator, Collection<? extends T> data)
它有一个在构造函数中设置的字段,如下所示:
this.data = Collections.unmodifiableCollection(data);
在 T 实现 Comparable 的特殊情况下,我不想要求传入比较器,因为我可以使用自然排序。所以我想我应该可以使用这个构造函数:
public <T extends Comparable<T>> MyClass(Collection<T> data)
但显然存在类型不匹配:无法从上述赋值语句中的Collection<T> to Collection<? extends T> 转换。我尝试了各种各样的事情:添加更多的通用参数等等,但都没有奏效。我似乎无法指定一个界限:如果你有一个实现 Comparable 的类型 T,那就直接做吧。
有什么想法吗?
谢谢。
【问题讨论】:
-
我猜你想将它声明为第二个构造函数,对吧?那么将
MyClass<T>更改为MyClass<T extends Comparable<T>>不是一种选择? -
我发现我可以使用静态工厂方法来做到这一点:static
> MyClass getInstance(Collection extends V> data),但这有点不令人满意. -
(注意最后一个代码示例创建了两个通用参数,都称为
T- 一个在类上,一个在构造函数上(就像在方法上一样,很少有用)。