将 Integer 对象转换为 int 类型时出现问题
Problems converting Integer object to type int
不确定这里发生了什么。似乎是一个自动装箱问题,但我已经坚持了一段时间,并且认为停止压力并让一些更有经验的人来解决这个问题可能会对我有所帮助。该作业本质上是实现 BST 并将其扩展到 AVL 的实现,然后是 运行 性能测试。为了简化事情,我们可以坚持使用 Integer 作为泛型。
我遇到的问题是比较两个节点时。未进行自动装箱且无法识别 intValue() 方法。
public class BinaryNode<Integer> implements Comparable<Integer>
{
Integer data;
BinaryNode<Integer> leftChild;
BinaryNode<Integer> rightChild;
int height;
BinaryNode(Integer data)
{
this(data, null, null);
}
BinaryNode(Integer data, BinaryNode<Integer> lt, BinaryNode<Integer> rt)
{
this.data = data;
this.leftChild = lt;
this.rightChild = rt;
}
public Integer getData()
{
return this.data;
}
public BinaryNode<Integer> getLeft()
{
return leftChild;
}
public void setLeft(BinaryNode newNode)
{
this.leftChild = newNode;
}
public BinaryNode<Integer> getRight()
{
return rightChild;
}
public void setRight(BinaryNode newNode)
{
this.rightChild = newNode;
}
@Override
public int compareTo(BinaryNode<Integer> otherNode)
{
return this.getData() - otherNode.getData();
}
}
编辑:感谢您的快速反馈。这正是我需要以不同的方式看待这个问题并理解我遇到的古怪行为所需的那种互动。不幸的是,我必须让这个 BinaryNode 成为一个通用的 class 但诀窍是换掉所有的 with or 正如本书的约定更喜欢使用 .
最好的解决方案是将 BinaryNode 更改为 BinaryNode 并从此 class 中删除 compareTo。现在我不再让 java.lang.Integer 黯然失色,我可以按照我最初的意图可靠地使用 Integer.compareTo 方法。
出于好奇,这是我必须与之交互的 TreePrinter class,它使用参数化的 BinaryNode class。 http://www.cs.sjsu.edu/~mak/CS146/assignments/3/TreePrinter.java
在class BinaryNode<Integer>
中,Integer是泛型类型参数,不是Integerclass。
改变
public class BinaryNode<Integer> implements Comparable<Integer>
至
public class BinaryNode implements Comparable<Integer>
并将 BinaryNode<Integer>
的任何外观更改为 BinaryNode
。
如果您希望 BinaryNode class 采用通用数据类型,则不会编写特定于 Integer 数据类型的代码(例如,如果 [=16=,return this.getData() - otherNode.getData()
将永远不会编译] returns 一些泛型类型参数 T).
public class BinaryNode<Integer> implements Comparable<Integer>
表示您有一个名为 Integer
的新通用类型。这不是java.lang.Integer
。这就是您遇到问题的原因,因为它们完全不同。
正如 Soritos Delimanolis 指出的那样,最好完全放弃通用类型。
不确定这里发生了什么。似乎是一个自动装箱问题,但我已经坚持了一段时间,并且认为停止压力并让一些更有经验的人来解决这个问题可能会对我有所帮助。该作业本质上是实现 BST 并将其扩展到 AVL 的实现,然后是 运行 性能测试。为了简化事情,我们可以坚持使用 Integer 作为泛型。
我遇到的问题是比较两个节点时。未进行自动装箱且无法识别 intValue() 方法。
public class BinaryNode<Integer> implements Comparable<Integer>
{
Integer data;
BinaryNode<Integer> leftChild;
BinaryNode<Integer> rightChild;
int height;
BinaryNode(Integer data)
{
this(data, null, null);
}
BinaryNode(Integer data, BinaryNode<Integer> lt, BinaryNode<Integer> rt)
{
this.data = data;
this.leftChild = lt;
this.rightChild = rt;
}
public Integer getData()
{
return this.data;
}
public BinaryNode<Integer> getLeft()
{
return leftChild;
}
public void setLeft(BinaryNode newNode)
{
this.leftChild = newNode;
}
public BinaryNode<Integer> getRight()
{
return rightChild;
}
public void setRight(BinaryNode newNode)
{
this.rightChild = newNode;
}
@Override
public int compareTo(BinaryNode<Integer> otherNode)
{
return this.getData() - otherNode.getData();
}
}
编辑:感谢您的快速反馈。这正是我需要以不同的方式看待这个问题并理解我遇到的古怪行为所需的那种互动。不幸的是,我必须让这个 BinaryNode 成为一个通用的 class 但诀窍是换掉所有的 with or 正如本书的约定更喜欢使用 .
最好的解决方案是将 BinaryNode
出于好奇,这是我必须与之交互的 TreePrinter class,它使用参数化的 BinaryNode class。 http://www.cs.sjsu.edu/~mak/CS146/assignments/3/TreePrinter.java
在class BinaryNode<Integer>
中,Integer是泛型类型参数,不是Integerclass。
改变
public class BinaryNode<Integer> implements Comparable<Integer>
至
public class BinaryNode implements Comparable<Integer>
并将 BinaryNode<Integer>
的任何外观更改为 BinaryNode
。
如果您希望 BinaryNode class 采用通用数据类型,则不会编写特定于 Integer 数据类型的代码(例如,如果 [=16=,return this.getData() - otherNode.getData()
将永远不会编译] returns 一些泛型类型参数 T).
public class BinaryNode<Integer> implements Comparable<Integer>
表示您有一个名为 Integer
的新通用类型。这不是java.lang.Integer
。这就是您遇到问题的原因,因为它们完全不同。
正如 Soritos Delimanolis 指出的那样,最好完全放弃通用类型。