1

私は Java を扱うのは比較的新しく、C/C++ のバックグラウンドを持っています。私のアプリでは、単にデータを保持するいくつかのクラスが必要です。

データ クラスごとに 1 つのファイルを用意するのではなく、単純にすべてのクラスを基本クラス内に配置することを考えました。

ここに私が宣言しているものがあります -

public class InternalData
{
    public class LocalSearchDef
    {
        public String m_sAdresse = null;
        public GeoPoint m_gpPoint = null;
        public int m_iSearchRadius = 0;
    }

    public class GeoBounds
    {
        public double m_dNELat;
        public double m_dNELng;
        public double m_dSWLat;
        public double m_dSWLng;
    }
}

ただし、作成しようとすると、「InternalData 型の囲んでいるインスタンスにアクセスできません。InternalData 型の囲んでいるインスタンスで割り当てを修飾する必要があります (egxnew A()、x は InternalData のインスタンスです)」というメッセージが表示されます。たとえば、GeoLocation の新しいインスタンス エラーが発生します。

これは次のいずれかで発生します。

GeoLocation gl = new GeoLocation();
or
GeoLocation gl = new InternalData.GeoLocation();

誰でも私を正しい方向に向けることができますか?

4

3 に答える 3

1

static 宣言を使用して実行できますが、この方法で実行しようとしないでください。

クラスを別のクラスにカプセル化する場合は、囲んでいるクラスと何らかの関係を持つ必要があります (Map.Entry から Map へのように)。目的を果たさないホルダー クラスを作成して、複数のクラスを同じファイルに整理しようとしているだけです。

ファイルごとに 1 つのクラスで問題はありません。これは標準的な Java のアプローチです。それらが同じファイルにある理由を正当化する必要があります。その逆ではありません。

また、データ メンバーへのすべてのパブリック アクセスを使用してデータ構造体を作成するだけでなく、アクセサー メソッドを使用してクラスを宣言することもできます。これは貧弱な OO です。

于 2012-04-30T15:59:23.640 に答える
1

内部クラスを静的にする必要があります。

public static class Foo {

}
于 2012-04-30T15:48:22.770 に答える
0

所属する InternalData のインスタンスなしで非静的インナーを使用しようとしています。

参照: <my reference> を含む外側のインスタンスが必要です

于 2012-04-30T15:47:51.587 に答える