[英]Generic Sorting function accepts T, but want to ensure T is comparable
我在Dart中做了一个简单的MergeSort的泛化。
我只是想成为一个占位符,所以我认为Node
的List<T>
可以对List<T>
进行足够的包装。 由于T是对象,因此它本身不具有compareTo,<,>,<=等,因为它不是数字或字符串。
我如何删除这些警告。
class Node<T> extends Comparable {
T _value;
Node(T value){
_value = value;
}
//.....
}
class MergeSort<T>{
list<Node<T>> _list;
MergeSort(List<Node<T>> list){
_list = list;
}
List<Node<T>> Sort( List<Node<T>> list ){
_list = list;
//.....
}
}
我遇到的问题是在MergeSort中,我需要比较节点,这已经足够了。 我实现operator ==
etc来处理这些情况,或者实现operator <
来处理这些情况。 自从我扩展了Comparable之后,我也有了String以来的compareTo
。
我不确定如何适应传递给Node,T的类,而且我不知道是否有办法让它expect
num,string等。
完整的类实现+共享的dartpad: https ://dartpad.dartlang.org/645157fb547da482fc2b
class Node<T> extends Comparable{
T _value;
Node(T item){
_value = item;
}
T getValue () => _value;
bool operator ==(other) => identical(this, other);
bool operator <( other){
if (other is! T){
return false;
}
//other is of same type, T.
if (_value < (other as Node<T>).getValue()){
return true;
}
return false;
}
bool operator <= (other){
return (this == other) || (this < other);
}
int compareTo (other){
if (this == other){
return 0;
}
if (this < other) {
return -1;
}
return 1;
}
}
也许有一个节点包装太多了? 我有点觉得我也许可以剥离Node类,而只拥有一个T列表,但是当涉及比较列表元素时,该问题将被推送到MergeSort中。
我想你要找的是
class Node<T extends Comparable>
和
class MergeSort<T extends Comparable>{
但Comparable
没有实现>
/ <
。 如果要使用它们,则可以创建自己的超类,并要求实现该类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.