我试图找出是否必须通过节点或仅通过其足够的键来扩展可比性。
public class ThreadedGenericNode<K,V> implements Comparable<ThreadedGenericNode<K,V>>
{
K _key;
V _value;
private ThreadedGenericNode _right;
private ThreadedGenericNode _left;
private ThreadedGenericNode _parent;
private boolean isThreadedRight;
private boolean isThreadedLeft;
public ThreadedGenericNode(K key,V value)
{
this._right = null;
this._left = null;
this._parent = null;
this.isThreadedLeft = true;
this.isThreadedRight = true;
this._key = key;
this._value = value;
}
@Override
public int compareTo(ThreadedGenericNode<K, V> o) {
if(this._key > o._key)
return 1;
return 0;
}
}
我得到了编译错误:“对于参数类型K,未定义运算符>”
所以我必须用K扩展比较吗? 或工具? 最终,密钥将为整数, 那怎么办呢?
答案 0 :(得分:1)
您不能将<
运算符与泛型一起使用。例如,如果您通过String
类型输入为K
,则使用>
运算符会发生什么?此外,在运行时,泛型类型被擦除为Object
。
您最好的选择是确保K
将实现Comparable
接口并在您的compareTo
类型上使用K
。因此,您应该在K
上使用有界类型:
public class ThreadedGenericNode<K extends Comparable<K>, V> implements Comparable<ThreadedGenericNode<K, V>> {
K _key;
.......
@Override
public int compareTo(ThreadedGenericNode<K, V> o) {
return this._key.compareTo(o._key);
}
}
如果您最后说K
只会是一个整数-那么使用泛型有什么意义呢?通过使用泛型,您希望能够灵活地将类与不同类型一起使用,并且仍然可以对这些类型进行编译时检查。