0

如何检查以下对象是否为空白?我有以下课程,如果不检查每个成员,我怎么能检查我的示例类没有任何数据?

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;
    }


}
4

5 回答 5

7

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

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

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

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

于 2013-08-13T16:02:54.847 回答
5

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

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

请不要认为这是完美的实现,因此请根据您的需要进行定制。

于 2013-08-13T16:02:05.690 回答
3

一种创建布尔标志并在设置器中操作它的选项。

制作一个私有的isBlank:

private boolean isBlank=true;

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

请注意,setter 应该检测到 null 的集合。在这种情况下,他们需要检查所有字段。这留给读者作为练习。

于 2013-08-13T16:02:00.507 回答
3

我会做的是提供一个带有 id 和 name 的构造函数,因此您知道该对象永远不会为空:

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");
于 2013-08-13T16:04:14.310 回答
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;
}

旧答案:您可以做的是创建一个修改后的布尔值,将其初始化为 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;
    }
}
于 2013-08-13T16:02:14.243 回答