Java 爪哇语:;使用未经检查或不安全的操作。用“重新编译”;
尽管花了大量时间在谷歌上搜索我的困境的答案,并重新阅读Java教科书中关于泛型的章节,但我似乎无法用以下代码解决问题:Java 爪哇语:;使用未经检查或不安全的操作。用“重新编译”;,java,inner-classes,instanceof,comparable,nested-generics,Java,Inner Classes,Instanceof,Comparable,Nested Generics,尽管花了大量时间在谷歌上搜索我的困境的答案,并重新阅读Java教科书中关于泛型的章节,但我似乎无法用以下代码解决问题: public class RedBlackTree<I extends Comparable> { private int count = 0; private RedBlackNode root; private RedBlackNode current; private RedBlackNode[] stack; /*
public class RedBlackTree<I extends Comparable>
{
private int count = 0;
private RedBlackNode root;
private RedBlackNode current;
private RedBlackNode[] stack;
/**
* Inner class used for representing the nodes of the red-black balanced binary search tree object.
*/
private class RedBlackNode implements Comparable
{
private I id;
private boolean is_btree;
private RedBlackNode[] links;
/**
* Constructor for objects of the RedBlackNode class.
*
* @param id The ID of the node.
*/
private RedBlackNode(I id)
{
if (id == null)
{
throw new NullPointerException("ID cannot be null.");
}
this.id = id;
this.is_btree = true;
}
/**
* Function for comparing the RedBlackNode object to another object.
*
* @param obj The object to be compared.
* @return If invocant > passed, returns 1; if invocant < passed, returns -1; if invocant = passed, returns 0.
*/
private int compareTo(Object obj)
{
if (obj instanceof RedBlackTree.RedBlackNode)
{
RedBlackNode node = (RedBlackNode)obj;
int result = id.compareTo(node.id);
return result > 0 ? 1 : result < 0 ? -1 : 0;
}
else
{
throw new ClassCastException("Expected a RedBlackNode object.");
}
}
}
}
几乎这里或那里的每一个I组合都会导致这样一个弹出窗口。我正在使用BlueJ环境进行编程,这使得不可能合并相关的编译器参数来查看任何细节
就我目前的研究所知,这与内部类使用I泛型类型有关,因此“RedBlackNode实现Comparable”和RedBlackNode内部类中的compareTo方法需要以某种方式应对这一事实
我知道这个问题已经在stackoverflow和其他地方被问到了,并且被回答了很多次,但我似乎无法将从这些例子中学到的知识应用到我的案例中。我对泛型相当陌生,所以我在这里能得到的任何帮助都将非常感谢 接受类型参数。编译器会抱怨,因为您没有提供它。接受类型参数。编译器抱怨是因为您没有提供它。警告是因为您使用的是原始类型
Comparable
,而不是给它一个类型参数。您所要做的就是将类定义更改为
public class RedBlackTree<I extends Comparable<I>>
公共类RedBlackTree
及
private类RedBlackNode实现了可比较的
并相应地调整
compareTo()
方法(这实际上会大大简化它,因为您不再需要类型检查和强制转换)。警告是因为您使用的是原始类型Comparable
,而不是给它一个类型参数。您所要做的就是将类定义更改为
public class RedBlackTree<I extends Comparable<I>>
公共类RedBlackTree
及
private类RedBlackNode实现了可比较的
并相应地调整
compareTo()
方法(这将大大简化它,因为您不再需要类型检查和强制转换)。进行以下更改
public class RedBlackTree<I extends Comparable<I>>
private class RedBlackNode implements Comparable<RedBlackNode>
@Override
public int compareTo(RedBlackNode node)
int result = id.compareTo(node.id);
return result > 0 ? 1 : result < 0 ? -1 : 0;
公共类RedBlackTree
私有类RedBlackNode实现了可比较的
@凌驾
public int compareTo(RedBlackNode节点)
int result=id.compareTo(node.id);
返回结果>0?1:结果<0-1 : 0;
在比较中删除类型检查。请注意公众,因此请始终使用
@Override
进行以下更改
public class RedBlackTree<I extends Comparable<I>>
private class RedBlackNode implements Comparable<RedBlackNode>
@Override
public int compareTo(RedBlackNode node)
int result = id.compareTo(node.id);
return result > 0 ? 1 : result < 0 ? -1 : 0;
公共类RedBlackTree
私有类RedBlackNode实现了可比较的
@凌驾
public int compareTo(RedBlackNode节点)
int result=id.compareTo(node.id);
返回结果>0?1:结果<0-1 : 0;
在比较中删除类型检查。请注意公众,因此始终使用
@Override
是的,但即使我为其提供了一个类型(如or),我仍然会遇到各种问题…在代码中有两个地方您使用的是可比较的,而不是类型信息。您是否尝试在两个位置添加类型信息?如果您添加了您尝试过的示例,这将非常有用。当我键入“class RedBlackNode implements Compariable”时,仍然会收到警告。另外,这个“public class RedBlackTree”更适合外部类声明吗?是的,但是即使我为它提供了一个类型(比如or),我仍然会遇到各种问题……在您的代码中,有两个地方您使用的是没有类型信息的Compariable。您是否尝试在两个位置添加类型信息?如果您添加了您尝试过的示例,这将非常有用。当我键入“class RedBlackNode implements Compariable”时,仍然会收到警告。另外,这个“公共类RedBlackTree”更适合外部类声明吗?好的,这就是我现在所拥有的(减去compareTo()方法的“调整”)。你建议我如何“调整”它?这是否合适:“private int compareTo(RedBlackNode obj)”?现在(通过调整),我仍然收到警告,它指向“私有类RedBlackNode实现Compariable”。好的,这就是我现在看到的(减去compareTo()方法的“调整”)。你建议我如何“调整”它?这是否合适:“private int compareTo(RedBlackNode obj)”?现在(调整后)我仍然收到警告,它指向“私有类RedBlackNode实现可比较”。谢谢!其他答案当然有帮助,但这个答案解决了所有问题(包括注意到覆盖compareTo函数的公共/私人困境,我认为这可能会引起问题,但其他人还没有提到)。谢谢!其他答案当然有帮助,但这个答案解决了所有问题(包括注意到在覆盖compareTo函数时的公共/私人困境,我认为这可能会引起问题,但其他人还没有提到)。