检查对象为空白

时间:2013-08-13 15:58:26

标签: java

如何检查以下对象是否为空?我有下面的课程,我怎么能检查我的样本类没有检查每个成员的数据?

public class Test {


    public static void main(String[] args){
        Sample sample = new Sample();

        if(sample!=null){
            System.out.println("Object is blank..");
        }
    }
}

class Sample {
    private int id;
    private String name;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


}

5 个答案:

答案 0 :(得分:7)

首先,您需要定义“空白”在业务术语中的含义。什么是“空白”对象?它是一个具有空名称的对象吗?使用空字符串名称?还有其他一些空参数的组合?

一旦你定义了一个“空白”对象实际上是什么,我建议添加一个方法来根据对象的当前内容执行该逻辑并返回结果:

public boolean isBlank () {
    return ...; // whatever "blank" means
}

如果可能,我建议不要使用基于标志的方法。虽然肯定有正当理由,但添加标志意味着您的setter必须始终保持标志的正确值(并且您还必须在反序列化后更新它)。

答案 1 :(得分:5)

我假设通过对象的空虚,你的意思是实例变量没有被初始化。我认为没有任何可用的方法来检查对象的空虚。 如果必须这样做,那么您可能需要编写自己的方法来检查文件。您应该检查基元的默认值,并检查对象类型的空值。这类方法的一个例子是:

public boolean isEmpty() {
    if(this.id == 0 && this.name == null)
        return true;
    else
        return false;
}

请不要将此视为完美的实施方案,因此请根据您的需要进行定制。

答案 2 :(得分:3)

创建布尔标志并在setter中操作它的一个选项。

制作私人isBlank:

private boolean isBlank=true;

然后让setter调用isBlank=false。任何setter调用都会使对象不为空。然后添加一个返回checkIsBlank(的getter isBlank

请注意,setter应将set设置为null。在这种情况下,他们需要检查所有字段。这留给读者练习。

答案 3 :(得分:3)

我会做什么,提供一个带id和名称的构造函数,因此你知道该对象永远不会是空白的:

public class Sample{
  private int id;
  private String name;

  public Sample(int id, String name){
    this.id = id;
    this.name = name;
  }
}

您可以对当前类执行的操作会覆盖toString方法:

class Sample {
    private int id;
    private String name;

    @Override
    public String toString(){
      try{
        return Integer.toString(id) + name;
      } catch(Execption e){
        return "";
      }
    }
}

if(sample.toString().isEmpty())
  System.out.println("Object is blank");

答案 4 :(得分:1)

您可以通过将对象与新实例化的对象进行比较来检查对象是否为空。

public boolean isBlank() {
    return this.equals(new Sample());
}

@Override
public boolean equals(Object o) {
    boolean toRet;
    if(o == null || !o instanceof Sample) {
         toRet = false;
    }
    else {
        Sample b = (Sample) o;
        toRet = this.id == b.id 
            && (this.name == null ? b.name == null : this.name.equals(b.name));
    }
    return toRet;
}

旧答案:你可以做的是创建一个 modified 布尔值,初始化为false,然后在调用setter时设置为true。

class Sample {
    public static final int INVALID_ID = -1;
    private int id = Sample.INVALID_ID;
    private String name = null;
    private boolean modified = false;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
        modified = true;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        modified = true;
    }

    public boolean isModified() { 
        return modified;
    }
}