2010-11-04 53 views
5
class A{ 

A(int i){ 
} 
} 

A obj=new A(1); 

創建對象時,如果我傳遞正數對象必須創建。 A obj = new A(-1); 如果傳遞了不規則的數字,則不能創建該對象。創建空引用

如何adjsut構造做到這一點

回答

9

如果您不希望創建一個對象,就不要叫new。調用new始終會創建一個對象,即使該對象因異常而被拋棄。如果你只是想避免來自的調用者接收到作爲構造函數調用結果的對象,那麼你可以讓你的構造函數拋出異常。如果你希望他們只是接收一個空引用,你不能在構造函數中做到這一點。

但是,你可以有一個靜態方法來代替,然後有條件電話new或返回null:

public class A 
{ 
    public static A createIfNonNegative(int i) 
    { 
     return i < 0 ? null : new A(); 
    } 
} 
3

可以使用Null Object模式。 在這種情況下,對象將被創建,但具有邏輯空狀態。

3

作爲替代喬恩斯基特(​​顯然)優良的答案,你也可以從構造函數拋出一個異常:

class A{ 

    A(int i){ 
     if(i<0) { 
      throw new NumberBelowZeroException(i); // implementation of this exception is left as an exercise 
     } 
    } 
} 

A obj=new A(1); 

通過這種方式,對象將構造(如構造,由已被調用,確保對象存在),但它會清楚地表明它不可用。

0

有幾種方法:

  1. 邏輯視的i封裝在相同的水平的值的。在這種情況下,需要條件檢查,即使它返回null:
     
    A a = createAInstance(i); 
    if(a == null) { // do something } 
    else { // do something else } 
    
    所以取決於算法,你可以在您使用水平檢查車況A a
     
    if(i >= 0) { A a = new A(i); // do something } 
    else { // do something else } 
    
  2. 的邏輯是一個只執行:使用空實現A的空存根的對象,處理A實例的代碼不應該感覺到差異;
  3. 邏輯混合:在2中使用空對象。