Вы можете добавить методы:
equals()
hash()
и реализовать сопоставимый интерфейс
int compareTo( Object other )
Кроме того, рекомендуется сделать его неизменным.
Например, если вы используете этот класс, чтобы проверить, должно ли что-то произойти:
class Remainder {
private String what;
private DateTime when;
public static Remainder remindMe( String what, DateTime when ) {
Reminder r = new Reminder();
r.what = what;
r.when = when;
}
public boolean isTimeAlready() {
//return DateTime.Builder.createTime().compareTo( this.when ) > 0;
// implemented somehow
return isCurrentTimeGreaterThan( this.when ); // assume it return true if current time is after "when"
}
}
Если вы используете это так:
DateTime atSix = new DateTime( 18, 0, 0 );
Reminder reminder = Reminder.remindMe("Go for the milk", atSix );
И час меняется (по ошибке конечно)
atSix.setHour( 1 );
Объекту "Напоминание" не будет иметь смысла, что переменная when
является закрытой, поскольку ее ссылка хранится снаружи и не контролирует ее, поэтому она становится ненадежной.
Это может быть очень странная ошибка, которую вы можете представить. Использование неизменяемых объектов менее подвержено ошибкам. Вот почему основные объекты в Java, такие как String, Integer и многие другие, являются неизменяемыми.
Если вы можете прочитать эту книгу: Эффективная Java , она повернется на 180 градусов по сравнению с вашей перспективой Java.