1. ホーム
  2. java

[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。

2022-01-20 03:13:06

質問内容

次のようなコードがあります。

class Hello {
    class Thing {
        public int size;

        Thing() {
            size = 0;
        }
    }

    public static void main(String[] args) {
        Thing thing1 = new Thing();
        System.out.println("Hello, World!");
    }
}

知っている Thing は何もしませんが、私の Hello, World プログラムはこれ無しでも問題なくコンパイルできます。私の定義したクラスだけが失敗しているのです。

そして、コンパイルを拒否しています。次のようになります。 No enclosing instance of type Hello is accessible." を作成する行で、新しいThingを作成します。どちらかだと思います。

  1. システムレベルに問題がある(DrJavaまたは私のJavaインストールに)または
  2. Javaで動作するプログラムの組み方について、基本的な誤解があるのですが。

何かアイデアはありますか?

解決方法は?

static class Thing を実行すると、プログラムが動作するようになります。

そのままでは Thing の特定のインスタンスと関連付けられています。 Hello (というのは、(たとえ一度も使用したり参照したりしていなくても)エラーになります。 new Thing(); を持たずに、特定の Hello のインスタンスがスコープに含まれます。

代わりに静的クラスとして宣言すれば、それは "nested" クラスとなり、特定の Hello のインスタンスを作成します。