Java 当I';我不使用泛型

Java 当I';我不使用泛型,java,generics,Java,Generics,当我尝试在Java中实现斐波那契堆时,我得到了一个泛型数组创建错误,尽管我没有使用泛型 private void consolidate() { Node[] degrees = new Node[45]; } 节点类如下: private class Node { public E val; public Node left, right, child; public int degree; public boolean mark; pub

当我尝试在Java中实现斐波那契堆时,我得到了一个泛型数组创建错误,尽管我没有使用泛型

private void consolidate() {
    Node[] degrees = new Node[45];
}
节点
类如下:

private class Node {

    public E val;
    public Node left, right, child;
    public int degree;
    public boolean mark;

    public Node(E _val) {
        val = _val;
    }

    public void insert(Node newNode) {
        if(left == this) {
            left = newNode;
            right = newNode;
            left.right = this;
            left.left = this;
        } else {
            Node temp = left;
            left = newNode;
            left.right = this;
            left.left = temp;
            temp.right = left;
        }
    }

    public void unlink() {
        left.right = right;
        right.left = left;

        if(child != null) {
            Node dummy = child;

            do {
                left.insert(dummy);
                dummy = dummy.left;
            } while(dummy != child);
        }
    }

}
我想可能是这部分导致了错误:

public E val;

但是我把它们都改成了
对象
,它仍然不起作用。如果有帮助,
E
扩展
Comparable

公共类FibonacciHeap

您的类
FibonacciHeap
实际上是泛型的,因此它的内部私有类
节点
也是泛型的,如第一条注释所述

如果您认为您的节点类不应该是泛型的,您可以使用
objectval
将其设置为内部静态类:

public class FibonacciHeap<E extends Comparable<E>> {
    private static class Node {
        Object val;
        // ...
    }
}

还有一个从
FibonacciHeap
中删除泛型的选项。

我猜
Node
FibonacciHeap
的一个内部类。但是泛型的内部类实际上是泛型,因为它在类型参数的范围内。你知道这一点,因为你在
节点
类中使用了
E
。你建议我如何解决这个问题?我会使用
ArrayList
而不是数组。
public class FibonacciHeap<E extends Comparable<E>>
public class FibonacciHeap<E extends Comparable<E>> {
    private static class Node {
        Object val;
        // ...
    }
}
public class FibonacciHeap<E extends Comparable<E>> {

}

private class Node {
    Object val;
    // ...
}