如何在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(集成开发环境)显示错误。