Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中分配内部类的数组?_Java_Arrays_Generics - Fatal编程技术网

如何在Java中分配内部类的数组?

如何在Java中分配内部类的数组?,java,arrays,generics,Java,Arrays,Generics,我想创建一个内部类对象数组,它没有类型参数,但包含的类有类型参数。以下是我的设想: public class DFS<T> { private class Node { T data; // ... } public boolean find2Stack(Node N0) { // ... for (Node Z : deeper(N)) { if (!isVi

我想创建一个内部类对象数组,它没有类型参数,但包含的类有类型参数。以下是我的设想:

public class DFS<T> {
    
    private class Node {
        T data;
        // ...
    }

    public boolean find2Stack(Node N0) {
        // ...
        for (Node Z : deeper(N)) {
            if (!isVisited(Z))
                S.push(Z);
        }
    }
    // and more version of DFS implementations

    // ...

    // helper functions

    private Node[] deeper(Node n) {
        // TODO: ...                   
        return new Node[0]; // ERROR.
    }

}
公共类DFS{
私有类节点{
T数据;
// ...
}
公共布尔find2Stack(节点N0){
// ...
对于(节点Z:更深(N)){
如果(!isVisited(Z))
S.push(Z);
}
}
//以及更多版本的DFS实现
// ...
//辅助函数
专用节点[](节点n){
//TODO:。。。
返回新节点[0];//错误。
}
}
我正在学习DFS算法。我只想把伪代码转换成Java,今天不想实现它的细节。所以我想创建一个长度为
0
-的
节点数组,我该怎么做

我搜索了一些类似的问题,但在我的例子中没有找到答案:内部类
节点
没有类型参数(我认为这不是泛型的,但我不确定),我想创建一个
节点
数组


好的,我找到了一种编译方法:

//...
return (Node[]) new Object[0];

问题在于
节点
是泛型外部类的非静态内部类
DFS
。这意味着它在通用参数
T
的范围内。因此,当您编写非限定名称
节点
时,它隐式地意味着
DFS.Node
,这是一种参数化类型,Java不允许创建参数化类型的数组(就像您无法执行
新建列表[5]

通常,无法创建参数化类型的数组的一个解决方案是创建原始类型的数组。但是,在这种情况下,什么是原始类型?正如我们所看到的,它不是节点。相反,您必须使用原始外部类显式限定它:
DFS.Node
。所以这是可行的:

Node[] result = new DFS.Node[0];

您是否尝试过
节点[]数组=新节点[0]?@KevinAnderson:是的,我出错了,如果你想确认的话,让我上传一张照片。你说的“DFS”是指什么?如果您想要更好的答案,请在堆栈溢出上发布时定义术语。@BasilBourque:是的,我指的是深度优先搜索,感谢您的澄清要求。@KevinAnderson:我将鼠标悬停在带下划线的代码上,让IDE(集成开发环境)显示错误。