- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
@Override
public boolean equals(Object obj) {
boolean answer = false;
if (obj instanceof Date) {
Date d = (Date)obj;
answer = (this.value.equals(d));
} else if (obj instanceof String) {
Date d = parse((String)obj);
answer = (this.value.equals(d));
} else if (obj instanceof Calendar) {
Calendar c = (Calendar)obj;
answer = (this.value.equals(c.getTime()));
} else if (obj instanceof AtomDate) {
Date d = ((AtomDate)obj).value;
answer = (this.value.equals(d));
}
return answer;
}
Проблема в данном случае в том, что нарушена симметрия: АтомДата может равняться строке (дате, календарю), но строка никогда не будет равна АтомДате. Метод equals по сути задаёт отношение эквивалентности для объектов. Законы, которым он должен подчиняться, спрашивают на всех собеседованиях по java. У блоха это тоже описано довольно детально.
Тогда вопрос: если equals в Java - эквивалентность, то как правильно проверять равенство?
http://svn.apache.org/repos/asf/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/AtomDate.java
я бы просто не стал ради одного формата даты yyyy-MM-dd'T'hh:mm:ss.SSS'Z' тянуть чей-то кривой сорец
Выдаёт неправильное время ;-) На моей машине разница с реальностью 8 часов
AtomDate выдаёт 2012-08-05T14:46:43.795Z
И прав AtomDate. Доктор, я умру?
Вот так вроде все ок: "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
заглючило меня, но AtomDate таки не нужен
Ну теперь, я думаю, и rat4 согласится с этим.