Почему метод setTime () в java.util.Date не считается устаревшим?

Все остальные мутаторы были объявлены устаревшими в JDK 1.1, так почему же их setTime()оставили как есть? Конечно, java.util.Calendarправильный способ манипулирования датами может создавать новые экземпляры по java.util.Dateмере необходимости с помощью java.util.Date(long)конструктора?

12.10.2009 21:36:46
Я действительно хочу, чтобы Дата была неизменной.
Steve Kuo 12.10.2009 21:45:19
Вы не должны использовать это, вы знаете. Есть лучшие альтернативы.
skaffman 12.10.2009 21:50:32
@skaffman. Нет, если вы используете java.sql. *. Создание java.sql.Timestamp подклассом java.util.Date было, конечно, еще одной ужасной ошибкой.
Alexander Pogrebnyak 12.10.2009 22:38:51
Когда вы используете java.sqlклассы даты, вы можете ограничить их использование локальными переменными, что, по крайней мере, ограничивает их общий ужас небольшим частным кодом.
skaffman 12.10.2009 23:03:43
3 ОТВЕТА
РЕШЕНИЕ

Биты, Dateкоторые были объявлены устаревшими, были теми, которые относились к календарям (т.е. день, месяц, год и т. Д.). Вы заметите, что методы доступа для полей календаря также устарели, а не только мутаторы.

Представление в виде значения в миллисекундах, тем не менее, все еще Dateработает, и не связано с представлением в календаре, поэтому оно оставалось неопределенным.

6
12.10.2009 21:39:36

Поскольку setTimeметод, по крайней мере, логически корректен: setXметоды, которые принимают день , месяц и т. Д., Не имеют смысла: java Date- это момент времени, и, следовательно, день , час , месяц и т. Д. Относятся только к представлению об этом Dateв конкретном случае TimeZone.

2
12.10.2009 21:40:31

Другие мутаторы пытались использовать java.util.Dateкак календарь, а не как мгновение во времени, оборачивая количество миллисекунд с 1 января 1970 года по 12:00 UTC. Таким образом, имеет смысл, чтобы этот мутатор не был признан устаревшим.

В Date/ CalendarAPI , еще страшно, конечно, и вы все равно должны использовать Joda время везде , где это возможно - но я могу понять , почему этот призыв не был устаревшим. Вы не можете сделать тип неизменяемым после факта, и это не было целью устаревания - цель состояла в том, чтобы попытаться помешать людям использовать его в качестве хранилища для «19 июня 1976 года» и т. Д.

4
12.10.2009 21:40:59