【问题标题】:How to allocate an array of inner class in Java?如何在Java中分配内部类数组?
【发布时间】:2020-12-13 07:30:41
【问题描述】:

我想创建一个内部类对象数组,它们没有类型参数,但包含的类确实有类型参数。这是我的场景:

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 算法。我只是想把伪代码转成Java,今天不想实现它的细节。所以我想创建一个Node的长度-0-array,我该怎么做呢?

我搜索了一些类似的问题,但在我的情况下没有找到答案:内部类 Node 没有类型参数(我认为这是非泛型的,但我不确定)并且我想要创建Node的数组...

【问题讨论】:

  • 你试过Node[] array = new Node[0];吗?
  • @KevinAnderson:我做了,我出错了,如果你想确认,我上传一张照片。
  • “DFS”是指en.wikipedia.org/wiki/Depth-first_search吗?如果您想要更好的答案,请在 Stack Overflow 上发布时定义您的条款。
  • @BasilBourque:是的,我的意思是深度优先搜索,感谢您的澄清要求。
  • @KevinAnderson:我将鼠标悬停在带下划线的代码上,让 IDE 显示错误(我的意思是集成开发环境)。

标签: java arrays generics


【解决方案1】:

问题在于Node 是通用外部类DFS&lt;T&gt; 的非静态内部类。这意味着它在通用参数T 的范围内。所以当你写出非限定名称Node时,它隐含的意思是DFS&lt;T&gt;.Node,它是一个参数化类型,而Java不允许创建一个参数化类型的数组(就像你不能做new List&lt;String&gt;[5]一样)。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 2015-06-20
      • 2015-10-02
      • 1970-01-01
      • 2018-11-29
      相关资源
      最近更新 更多