"new Date (int year, int month, int day)"가 더 이상 사용되지 않는 이유는 무엇입니까?
최근에 상속 한 내 응용 프로그램은 생성자에 대한 사용 중단 경고가 가득합니다.
Date d = new Date(int year, int month, int day)
이처럼 단순한 것을 다음과 같이 "대체"한 이유를 아는 사람이 있습니까?
Date d = null;
Calendar cal = GregorianCalendar.getInstance();
cal.set(1900 + year, month, day);
d = cal.getTime();
자, 분명히 폐기 경고는 그 자체로는 문제가되지 않지만,이 생성자가 제거되면 고통스럽게 울부 짖을 수백만 개의 LOC를 상상할 수 있습니까?
벤치마킹에 대한 짧은 플레이에서 후자는 실행하는 데 약 50 % 더 많은 시간이 걸립니다.
원래 Date
는 날짜와 관련된 모든 논리를 포함하도록 의도되었지만 API 설계자는 결국 지금까지 보유한 API가 매우 부적절하고 시간대, 로케일, 다른 달력, 일광 절약 시간과 같은 문제를 올바르게 처리하도록 완전히 확장 할 수 없음을 깨달았습니다. 등
그래서 그들은 Calendar
그 모든 복잡성을 다루기 위해 만들어졌고 Date
간단한 타임 스탬프 로 강등 되어 형식화, 구문 분석 및 개별 날짜 필드를 다루는 모든 기능을 사용하지 않습니다.
BTW, 내부적으로 Date(int, int, int)
생성자 와 같은 이러한 메서드는 이제를 호출 Calendar
하므로 속도 차이가 보이면을 호출 할 때 잘못된 작업을하고있는 것 Calendar
입니다.
Calendar
결론 : 지나치게 복잡한 것은 자바의 API가 아니고 , 인간의 날짜 개념이며, 유일한 문제 Calendar
는 가장 일반적인 사용법에 대한 지름길을 많이 제공하지 않는다는 것입니다.
Java Date API는 오랫동안 비판을 받아 왔습니다 . 예를 들어 this thread를 참조하십시오 .
Joda-Time 또는 Apache Commons Lang 에서 대체 날짜 / 시간 유틸리티 를 확인할 수 있습니다 .
대답은 이식성입니다.
수업 Date
은 그다지 유연하지 않습니다. 날짜를 정의 할 수 있지만 다른 달력 형식으로 변환 할 수는 없습니다. 그래서 Sun은 Calendar
더 유연하게 만들기 위해 추가 클래스 계층 구조 ( ) 를 사용하기로 결정했습니다 .
그럼에도 불구하고별로 편리하지 않습니다.
대부분 원래 java.util.Date가 부풀려서 완전히 시간대를 인식하지 못하고 국제화 친화적이지 않았기 때문입니다.
그러나 Date는 여전히 사용 중이며 Value Objects 또는 데이터 유형으로 매우 잘 사용됩니다. 명시 적으로 불변으로 만드는 한 쉽게 갈 수 있습니다. 나는 그것이 불변해야한다고 생각하는 경향이있다. 다른 목적으로 우리는 우리가 조작 할 달력을 가지고있다. 많은 조작이 예상되는 곳에서는 Joda-Time과 같은 것을 고려해야합니다.
[편집 됨]
후자의 코드에서 Date를 인스턴스화하지 마십시오. 소용이 없습니다. 벤치 마크에 대해 더 나은 결과를 얻을 수 있습니다.
물론 아무도 다른 달력 형식을 사용하지 않지만 새로운 API는 99 % 일반적인 경우에 대해 작성하는 코드의 양을 증가 시키므로 LoC에서 지불하는 Java 프로그래머에게 큰 혜택입니다.
Michael Borgwardt는 기술적으로 가장 좋은 대답을했습니다. 그러나 왜 그는 우리 태양계가 배치 된 방식에 대해 인간을 비난하는 것일까 요?
좋아요, 우리는 초, 분, 시간이라는 아이디어를 생각해 냈습니다.
그러나 지구의 날이 대략적인 것은 우리의 잘못이 아닙니다 (우리가 실제 태양 일, 평균 태양 일 또는 항성일에 대해 이야기하고 있는지 여부에 따라 다르며, 각각 주기적으로 무작위로 변함). 지구 궤도가 태양 주위를 도는 시간이 약 365 일인 것은 우리 잘못이 아니며, 지구 주위를 도는 달의 궤도가 약 27.3 일 이라는 것은 우리 잘못이 아닙니다 . 열대, 비정상적 또는 드라 코닉 달).
캘린더가 이러한 모든 세부 정보를 고려하지 않은 것이 기쁘지 않습니까? 그렇다면 소프트웨어 버그는 실제로 달의 위상에 따라 달라질 수 있습니다.
참고 URL : https://stackoverflow.com/questions/460423/why-was-new-dateint-year-int-month-int-day-deprecated
'IT TIP' 카테고리의 다른 글
Google Play 오류 "[DF-DFERH-01] 서버에서 정보를 검색하는 동안 오류 발생" (0) | 2020.12.12 |
---|---|
Intellij Idea Community Edition의 Tomcat (0) | 2020.12.12 |
C ++에서 컴파일러 및 인수 평가 순서 (0) | 2020.12.12 |
ggplot2에서 글꼴 수정 (0) | 2020.12.12 |
node.js로 데스크톱 애플리케이션을 만들 수 있습니까? (0) | 2020.12.12 |