2016-08-18 4 views
0

非常に多くの場合、ドット表記でアクセスされる 'ネストされた'クラスのネストされていないクラスコンポジションではない静的変数を参照します。構成:ヌルポイント認識なしでドット表記で非静的変数にアクセスするにはどうすればよいですか?

例:

int a = getClassA().classB.classC.x; where 

getClassA()は、クラスA型のオブジェクトを返し、xはアクセスしたい変数です。

classBはClassAの変数です。

classCはClassBの変数です。

xはClassCの変数です。

しかし、同様のテストシナリオを再作成しようとすると、NullPointerExceptionエラーが発生します。

コード

public class Main() 
{ 
public static void main(String[] args) { 

int a = getClassA().classB.classC.x; 
} 
} 

public class ClassA 
{ 
ClassB classB; 
} 


public class ClassB 
{ 
ClassC classC; 
} 


public class ClassC 
{ 
int x = 1; 
} 

//Class Main, A, B and C are in separate files. 

アドオン

C#で自動実装プロパティがあることをどこかで読んでください。上記の例では、クラスAは

public Class A { 
private ClassB _classB; 

public ClassB classB 
{ 
get { 
    if (_classB == null) _classB = new ClassB(); 
    return _classB; } 
set {_classB = value; } 
} 
} 

になるので、ClassBはドット表記でアクセスされるとインスタンス化されます。 Javaに似たものがありますか?

これに関するお手伝いをお待ちしております。

ありがとうございます。

答えて

0

オブジェクトは、例えば、それらに

をインスタンス化することによってヌルでないことを確認

public class ClassA 
{ 
    ClassB classB = new ClassB(); 
} 

public class ClassB 
{ 
    ClassC classC = new ClassC(); 
} 
1

これは、それがgetClassA()方法の欠如を与えることはできません正確なコードであれば、あなたはNPE sは期待されているので、ClassBまたはCをインスタンス化しないでください。

関連する問題