Встретил конструкцию вида
public static final Person NULL = new NullPerson();
что это значит и как читать?
текст из книги Брюс Эккель "Философия Java" (стр.488):
Простой пример: во многих системах существует класс Person, представляющий человека. Если в коде информация о человеке недоступна (или недостаточна), традиционно программист использует null в качестве значения ссылки. Вместо этого также можно создать null-объект. Но даже при том, что null-объект реагирует на все сообщения, на которые реагирует «настоящий» объект, должен существовать какой-то способ проверки «null-объектности». Проще всего воспользоваться идентификационным интерфейсом:
//: net/mindview/util/Null.java
package net.mindview.util;
public interface Null {}
Такое решение позволяет использовать instanceof для обнаружения null-объектов
и, что еще важнее, не требует включения метода isNull во все классы (который по сути
будет моделировать RTTI — почему не воспользоваться встроенными средствами?).
//: typeinfo/Person.java
// Класс с null-объектом,
import net.mindview.util.*;
class Person {
public final String first;
public final String last;
public final String address;
// И т.д.
public Person(String first, String last, String address){
this.first = first;
this.last = last;
this.address = address;
}
public String toString() {
return "Person: " + first + " " + last + " " + address;
}
public static class NullPerson
extends Person implements Null {
private NullPerson() { super("None", "None", "None"); }
public String toString() { return "NullPerson"; }
}
public static final Person NULL = new NullPerson();
}
//'.~