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; /*

尽管花了大量时间在谷歌上搜索我的困境的答案,并重新阅读Java教科书中关于泛型的章节,但我似乎无法用以下代码解决问题:

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函数时的公共/私人困境,我认为这可能会引起问题,但其他人还没有提到)。