2012-04-30 29 views
1

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

データクラスごとに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(); 

誰もが正しい方向に私を指すことができますしてください?

+0

[Java - Foo型の囲むインスタンスはアクセスできません](http://stackoverflow.com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-accessible) – fabian

答えて

1

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

public static class Foo { 

} 
+0

これで問題は解決しますが、静的な仕組みと使用方法を理解していない限り、親クラスのインスタンスで内部クラスを囲む方がコードの慣習が優れています。 – Charles

+0

彼の意図は、単にいくつかのクラスをまとめて「InternalData」としてまとめていることを考えれば、彼が外部クラスのインスタンスを持つ理由はありません。したがって、クラスを静的にするのがベストプラクティスと言えます。 – DaveJohnston

+0

@Charles - _He_あなたが言うように静的な仕組みがどのように働くかについては疑問を提起しています。各クラスインスタンスは独自のデータスペースを持つか、データの共有がありますか? – Simon

1

静的宣言を使用して行うことはできますが、このようにしないでください。

クラスを別のクラスにカプセル化する場合は、(Map.Entry to Mapのように)囲むクラスと何らかの関係があるはずです。目的を果たせないホルダークラスを作ることによって、複数のクラスを同じファイルに編成しようとしています。

ファイルごとに1つのクラスに間違いはありませんが、これは標準のJavaアプローチです。あなたは同じファイル内にあるべき理由を正当化する必要があります。

アクセサーメソッドを使用してクラスを宣言したい場合は、データメンバーへのすべてのパブリックアクセスでデータ構造体を作成するだけではありません。これは悪いOOです。

関連する問題