class A{
A(int i){
}
}
A obj=new A(1);
創建對象時,如果我傳遞正數對象必須創建。 A obj = new A(-1); 如果傳遞了不規則的數字,則不能創建該對象。創建空引用
如何adjsut構造做到這一點
class A{
A(int i){
}
}
A obj=new A(1);
創建對象時,如果我傳遞正數對象必須創建。 A obj = new A(-1); 如果傳遞了不規則的數字,則不能創建該對象。創建空引用
如何adjsut構造做到這一點
如果您不希望創建一個對象,就不要叫new
。調用new
始終會創建一個對象,即使該對象因異常而被拋棄。如果你只是想避免來自的調用者接收到作爲構造函數調用結果的對象,那麼你可以讓你的構造函數拋出異常。如果你希望他們只是接收一個空引用,你不能在構造函數中做到這一點。
但是,你可以有一個靜態方法來代替,然後有條件電話new
或返回null:
public class A
{
public static A createIfNonNegative(int i)
{
return i < 0 ? null : new A();
}
}
可以使用Null Object模式。 在這種情況下,對象將被創建,但具有邏輯空狀態。
作爲替代喬恩斯基特(顯然)優良的答案,你也可以從構造函數拋出一個異常:
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);
通過這種方式,對象將構造(如構造,由已被調用,確保對象存在),但它會清楚地表明它不可用。
有幾種方法:
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 }