java removeto_java – 在泛型集合中实现remove(Object o)

我正在编写一个基于二叉树模型的泛型集合.

class MyTree > extends AbstractCollection{...}

基础节点< T> class(以及其他)包含以下方法:

public Node getLeft() // left Node

public Node getRight() // right Node

public T getValue() // value stored in the Node

我想覆盖接口AbstractCollection< T>接口的方法boolean contains(Object o).有可能检查除T以外的类型的对象.

对于O(log n)中的树遍历,泛型类型T必须实现Comparable< T>,因此它具有compareTo(T t)方法.

我的代码:

@Override

public boolean contains(Object o){

T t = (T) o; // produces warning (see below)

BSNode currentNode = this.root;

while(currentNode != null){

if(currentNode.getValue().equals(o)) {return true;}

if(currentNode.getValue().compareTo(t) < 0) {currentNode = currentNode.getRight();}

if(currentNode.getValue().compareTo(t) > 0) {currentNode = currentNode.getLeft();}

}

return false;

}

问题是我不能只使用compareTo(T t)将Object o强制转换为T t.从技术上讲,Object可以转换为T,但由于T是泛型类型,我收到此警告:

warning: [unchecked] unchecked cast

T t = (T) o;

^

required: T

found: Object

where T is a type-variable:

T extends Comparable declared in class MyTree

也可以

>确认我可以使用@SuppressWarnings(“unchecked”)安全地忽略警告,

>建议我如何安全地将Object转换为T,

>解释为什么上述两点都不能满足,所以我可以不再考虑如何使这项工作?

非常感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值