2

以前にやったことがあると確信しているので、これはかなり簡単だと思いましたが、これを機能させることはできません。私のクラスは:

public class City
{
    String start = null;
    String end = null;
    int weight = 0;
}

そして私はやっています:

City cityGraph[] = new City[l];

たとえば、cityGraph[x].start にアクセスしようとすると、null ポインター例外が発生するため、配列内のすべての要素も初期化する必要があると考えたので、次のようにします。

for(int j = 0; j < l; j++)
        {
            cityGraph[j] = new City();
        }

しかし、それは私にこのエラーを与えています:

No enclosing instance of type Graphs is accessible. 
Must qualify the allocation with an enclosing instance 
of type Graphs (e.g. x.new A() where x is an instance of Graphs).

これが何を意味するのか、またはそれを修正する方法がわかりません。どんな助けでも大歓迎です!

4

3 に答える 3

5

これは、そのようなpublic class City内部クラスとして宣言したときに発生する可能性がありますpublic class Graphs

public class Graphs {

    public class City {
    
    }

}

この方法では、最初にインスタンスCityを構築しないと構築できません。Graphs

City次のように構築する必要があります。

cityGraph[j] = new Graphs().new City();
// or
cityGraph[j] = existingGraphsInstance.new City();

これは正直言って意味がありません。Cityスタンドアロン クラスに抽出するのではなく、

public class Graphs {

}
public class City {

}

または、それを宣言して静的なネストされたクラスにしますstatic

public class Graphs {

    public static class City {
    
    }

}

Cityいずれにせよ、だけで new を構築できますnew City()

以下も参照してください。

于 2012-07-18T14:42:55.370 に答える
1

あなたのクラスは静的内部クラスではないようです。つまり、インスタンス化するには外部クラスのインスタンスが必要です。

静的クラスと内部クラスの詳細 http://mindprod.com/jgloss/innerclasses.html

于 2012-07-18T14:42:19.640 に答える
0

私は実際に自分の質問に対する答えを持っています。クラスを静的にすることで修正しました。投稿するまで、なぜこれを考えなかったのかわかりません...これが将来誰かに役立つことを願っています。

于 2012-07-18T14:40:01.640 に答える