我有一个二叉树BinaryTree<E>
,其中包含以下变量
protected E data;
protected BinaryTree<E> left,right;
由教授给我,并被要求使用以下代码(仅显示此处显示的相关代码)将我成功完成的每个节点的值加倍:
if (data != null) {
this.setData(String.valueOf(Integer.parseInt(getData().toString()) * 2));
}
不幸的是,这引发了以下警告我想摆脱:
1 error found:
Error: incompatible types: java.lang.String cannot be converted to E
有什么想法吗?
答案 0 :(得分:1)
您必须使用E作为参数来实现setData。如果使用输入参数类型String实现setData,那么它将抛出一个错误,即String无法转换为E.请参阅下面的代码:
time_major=True
取消注释后的注释行会导致您在问题中提到的相同错误。
答案 1 :(得分:0)
您的BinaryTree是一种通用类型,因此每次使用时都是如此 this.setData(...)它会期望你在其中设置的任何类型,它都是E类型。
因此,您的代码将起作用,您将不得不添加E数据类型。
所以,你有两个解决方案:
删除BinaryTree类的E,您的数据字段/方法将存储&#34; java.lang.Object&#34;所以你可以直接将数据设置为字符串或更好的盒装双(新的Double(...))
你使用BinaryTree类,例如你的add值,使用BinaryTree的专用版本,如:BinaryTree node = new BinaryTreeNode(); node.setData(new Double(3.5));