- 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;
}
scriptin 05.08.2012 13:35 # 0
roman-kashitsyn 05.08.2012 13:54 # +2
Проблема в данном случае в том, что нарушена симметрия: АтомДата может равняться строке (дате, календарю), но строка никогда не будет равна АтомДате. Метод equals по сути задаёт отношение эквивалентности для объектов. Законы, которым он должен подчиняться, спрашивают на всех собеседованиях по java. У блоха это тоже описано довольно детально.
scriptin 05.08.2012 14:14 # −1
Тогда вопрос: если equals в Java - эквивалентность, то как правильно проверять равенство?
scriptin 05.08.2012 14:18 # +1
rat4 05.08.2012 14:09 # 0
http://svn.apache.org/repos/asf/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/AtomDate.java
roman-kashitsyn 05.08.2012 17:27 # 0
я бы просто не стал ради одного формата даты yyyy-MM-dd'T'hh:mm:ss.SSS'Z' тянуть чей-то кривой сорец
bormand 05.08.2012 17:29 # 0
roman-kashitsyn 05.08.2012 17:37 # +1
bormand 05.08.2012 17:42 # 0
roman-kashitsyn 05.08.2012 17:46 # +2
rat4 05.08.2012 17:53 # +1
Выдаёт неправильное время ;-) На моей машине разница с реальностью 8 часов
roman-kashitsyn 05.08.2012 17:57 # +1
rat4 05.08.2012 18:26 # +1
AtomDate выдаёт 2012-08-05T14:46:43.795Z
И прав AtomDate. Доктор, я умру?
bormand 05.08.2012 18:44 # +2
Вот так вроде все ок: "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
roman-kashitsyn 05.08.2012 18:49 # +1
заглючило меня, но AtomDate таки не нужен
bormand 05.08.2012 18:50 # 0
Ну теперь, я думаю, и rat4 согласится с этим.
rat4 05.08.2012 18:55 # 0