Java 创建空引用

Java 创建空引用,java,Java,在创建对象时,若我传递正数,则必须创建对象。 A obj=新的A(-1); 若传递了负数,则不能创建对象 如何调整构造函数以执行此操作如果不希望创建对象,请不要调用new。调用new始终会创建一个对象,即使该对象由于异常而被丢弃。如果您只是想避免调用方由于构造函数调用而接收对象,那么可以让构造函数抛出异常。如果希望它们只接收空引用,则不能在构造函数中这样做 但是,您可以使用一个静态方法,该方法随后有条件地调用new或返回null: class A{ A(int i){ } } A obj=n

在创建对象时,若我传递正数,则必须创建对象。 A obj=新的A(-1); 若传递了负数,则不能创建对象


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

如果不希望创建对象,请不要调用
new
。调用
new
始终会创建一个对象,即使该对象由于异常而被丢弃。如果您只是想避免调用方由于构造函数调用而接收对象,那么可以让构造函数抛出异常。如果希望它们只接收空引用,则不能在构造函数中这样做

但是,您可以使用一个静态方法,该方法随后有条件地调用
new
或返回null:

class A{

A(int i){
}
}

A obj=new A(1);
公共A类
{
公共静态A createIfNonNegative(int i)
{
返回i<0?空:新的A();
}
}
您可以使用模式。
在这种情况下,将创建具有逻辑空状态的对象

作为Jon Skeet(显然)优秀答案的替代方案,您还可以从构造函数中抛出异常:

public class A
{
    public static A createIfNonNegative(int i)
    {
        return i < 0 ? null : new A();
    }
}
A类{
A(国际一){

如果(i有几种方法:

  • 取决于封装在同一级别的
    i
    值的逻辑。在这种情况下,需要进行条件检查,即使它返回null:
  • 逻辑只在一个实例中实现:使用Null对象为一个实例实现一个Null存根,处理实例的代码不应该感觉到区别
  • 逻辑是混合的:使用空对象,如图2所示
  • 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);
    
    A a = createAInstance(i); if(a == null) { // do something } else { // do something else } if(i >= 0) { A a = new A(i); // do something } else { // do something else }