class A{
A(int i){
}
}
A obj=new A(1);
创建Object时如果我传递正数,则必须创建对象。 一个obj = new A(-1); 如果传递了negetive数字,则不得创建对象。
如何调整构造函数来执行此操作
答案 0 :(得分:9)
如果您不想创建对象,请不要致电new
。调用new
总是会创建一个对象,即使它因异常而被抛弃。如果您只是想通过构造函数调用来避免接收对象的调用者,则可以使构造函数抛出异常。如果您希望它们只是接收空引用,则不能在构造函数中执行此操作。
但是,您可以使用静态方法,然后有条件地调用new
或返回null:
public class A
{
public static A createIfNonNegative(int i)
{
return i < 0 ? null : new A();
}
}
答案 1 :(得分:3)
您可以使用Null Object模式。 在那种情况下,将创建对象但具有逻辑空状态。
答案 2 :(得分:3)
作为Jon Skeet(显然)优秀答案的替代方案,您还可以从构造函数中抛出异常:
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);
这样,对象将被构造(作为构造函数,通过调用,确保对象存在),但它将清楚地表明它不可用。
答案 3 :(得分:0)
有几种方法:
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 }