1、定义
空对象就是一个正常的对象,只不过你用这个对象来替代null。
2、作用
当使用null表示缺少对象时,在每次引用前都要测试其是否为null,因此需要在代码中加入判断语句,当判断语句变多时,代码就变得杂乱,使用空对象可以减少判断的语句。
例子:
假如有一个Person类,Person类有姓名地址等属性。还有一个Position(职位)类,职位类包含了职位名称和担任职位的人(一个Person对象)等属性。
一般情况下是先确定有哪些职位然后再确定职位由谁担任,那么在没有确定担任人的时候,可以将Position类中的Person对象设为null,但是也可以将其设为一个空对象。
Person类:
class Person{
private String name;
private String address;
public Person(String name,String address) {
this.name = name;
this.address = address;
}
/**
*Person的空对象,它是一个实在的对象,只不过域的值与其他对象不同
*/
public static class NullPerson extends Person implements Null{
private NullPerson(){ super("None","Node");}
public String toString() {
return "NullPerson";
}
}
public String toString() {
return name+" "+address;
}
public static final Person NULL = new NullPerson();
}
Position类
class Position{
private String title;
private Person person;//当该职位没有人担任时,我们可以将person设为空对象,而不是null;
public Position(String title,Person person) {
this.title = title;
this.person = person;
}
public Position(String title) {
this.title = title;
person = Person.NULL;//只设置职位而没有派任人时,将person设为空对象
}
public String getTitle() {
return title;
}
public void setTitlt(String title) {
this.title = title;
}
public Person getPerson() {//如果这个职位没有人担任,那么会返回空对象而不是null
return person;
}
public void setPerson(Person newPerson) {
person = newPerson;
if(person == null)
person = Person.NULL;
}
public String toString() {
return title+" "+person.toString();
}
}