创建空引用

时间:2010-11-04 08:01:18

标签: java

class A{

A(int i){
}
}

A obj=new A(1);

创建Object时如果我传递正数,则必须创建对象。 一个obj = new A(-1); 如果传递了negetive数字,则不得创建对象。

如何调整构造函数来执行此操作

4 个答案:

答案 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)

有几种方法:

  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中实现:使用Null Object为A实现空存根,处理A实例的代码不应感觉到差异;
  3. 逻辑混合:使用Null Object,如2。