2016-06-19 6 views
0

こんにちは私はシングルトンクラスを作ろうとしています。毎回新しいインスタンスが返されます。ここに私のコードです。私は間違いを犯しましたか?なぜ私は新しいインスタンスを毎回返すのか...それは私が考えるのと同じでなければならない。 ヘルプが必要です。シングルトンクラスは毎回新しいインスタンスを返します

public final class SingletonA {  
    private static SingletonA instance; 

    private SingletonA(){ 
    } 

    public static SingletonA getInstance() {  
     if(instance==null) 
     { 
      System.out.println("RETURNING NEW INSTANCE OF SingletonA Class"); 
      return new SingletonA(); 
     } 
     System.out.println("RETURNING OLD INSTANCE OF SingletonA Class"); 
     return instance; 
    } 
} 

public class SingletonB { 
    public static void main(String[] args) { 
     SingletonA one = SingletonA.getInstance(); 
     System.out.println("1."+one+" | "+one.hashCode()); 

     SingletonA two = SingletonA.getInstance(); 
     System.out.println("2."+two+" | "+two.hashCode()); 

     SingletonA three = SingletonA.getInstance(); 
     System.out.println("3."+three+" | "+three.hashCode()); 
    } 
} 

// HERE IS THE OUTPUT 
RETURNING NEW INSTANCE OF SingletonA Class 
[email protected] | 705927765 
RETURNING NEW INSTANCE OF SingletonA Class 
[email protected] | 366712642 
RETURNING NEW INSTANCE OF SingletonA Class 
[email protected] | 1829164700 
+5

「インスタンス」には、どの時点でnull以外の値を割り当てますか? – markspace

+0

最初の行のインスタンスは、新しいSingletonA()を毎回返す代わりに、= new SingletonA()に代入する必要があります。 –

答えて

2

あなたはinstanceを割り当てる必要があり

if(instance==null) { 
    System.out.println("RETURNING NEW INSTANCE OF SingletonA Class"); 
    instance = new SingletonA(); 
} 
+0

ありがとう作品ありがとう –

2

以下のように変更それ以外のチェックは常にので、新しいインスタンスを返す、真得られます。なぜなら、あなたここ

public static SingletonA getInstance() {  
    if(instance==null) 
    { 
     System.out.println("CREATING NEW INSTANCE OF SingletonA Class"); 
     instance = new SingletonA(); 
    } 
    System.out.println("RETURNING INSTANCE OF SingletonA Class"); 
    return instance; 
} 
+0

ありがとう作品 –

2

が正しくありませんSingletonAの新しいインスタンスを返し、それをオブジェクトインスタンスに割り当てません。

public static SingletonA getInstance() {  
     if(instance==null) 
     { 
      System.out.println("RETURNING NEW INSTANCE OF SingletonA Class"); 
      return new SingletonA(); 
     } 
     System.out.println("RETURNING OLD INSTANCE OF SingletonA Class"); 
     return instance; 
    } 

あなただけのヌルチェックのためのテストに戻る前に、必ず

public static SingletonA getInstance() {  
     if(instance==null) 
     { 
      System.out.println("RETURNING NEW INSTANCE OF SingletonA Class"); 
      instance = new SingletonA(); 
     } 
     System.out.println("RETURNING OLD INSTANCE OF SingletonA Class"); 
     return instance; 
    } 
+0

ありがとう作品 –

2

あなたは新しいSingletonAにインスタンスを初期化する必要があります()の平均。

public final class SingletonA {  
    private static SingletonA instance; 

    private SingletonA(){ 
    } 

    public static SingletonA getInstance() {  
     if(instance==null) 
     { 
      System.out.println("RETURNING NEW INSTANCE OF SingletonA Class"); 
      // You are missing this assignment. 
      instance = new SingletonA(); 
      return instance; 
     } 
     System.out.println("RETURNING OLD INSTANCE OF SingletonA Class"); 
     return instance; 
    } 
} 
+0

ありがとう作品 –

関連する問題