2016-06-19 45 views
0

嗨我嘗試創建一個單例類。但每次都會返回一個新實例。這是我的代碼。我犯了什麼錯誤?爲什麼它每次都會返回新的實例......它應該和我想的一樣。 此處需要幫助。Singleton類每次都會返回新的實例

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

在什麼時候爲'instance'指定一個非空值?第一行中的 – markspace

+0

實例必須分配給= new SingletonA(),而不是每次返回新的SingletonA()。 –

回答

2

更改像下面

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

感謝它的工作 –

2

你必須指定instance否則檢查總會產生真正的,從而返回一個新的實例:

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

感謝它的工作原理 –

相關問題