역 호환성을 지원하기 위해 어떤 Java 디자인이 명시 적으로 수행됩니까? [닫은

StackOverflow https://stackoverflow.com/questions/961986

  •  12-09-2019
  •  | 
  •  

문제

부터 이 질문 4 개 표로 돌아 가기 위해, 나는 커뮤니티가 더 호의적으로 볼 수 있기를 바라는 더 좁은 질문을 다시 시도하고 있습니다.

Java의 특정 디자인 결정은 그것이 선호하는 설계 결정이 아니라 거꾸로 호환성을 지원해야했기 때문에 그들이 수행되는 방식으로 기록됩니다.

명백한 경우는 런타임에서 유형 매개 변수를 감지 할 수없는 제네릭입니다. (그래서 당신은 할 수 없습니다 :

 public void addEmptyMember(List<?> someList) {
      if (someList instanceof List<String>) {
            ((List<String>) someList).add("");
      }
 }

언어 설계 및 표준 API에는 이러한 다른 예가 있습니까?

도움이 되었습니까?

해결책

이 질문에는 단일 정답이 없기 때문에 다른 질문보다 더 나은지 확실하지 않습니다.

뒤로 호환성이라는 이름으로 타협을 한 세 가지 기능 (이미 언급 한 일반적인 삭제 외에도)은 루프 구문, 바라크 및자가 옥싱의 새로운 기능이었습니다.

루프 구문의 새로운 새로운 것은 아마도 읽었을 것입니다 for (item in List), 그러나 그것은 만들어야 할 것입니다 in 예약 된 단어로. 이것은 수많은 거꾸로 호환성 문제를 일으킬 것이며, 그 중 가장 적은 것은 아닙니다. System.in 이름이 바뀌어야합니다.

Varargs와 Autoboxing은 둘 다 모호성의 가능성을 추가했습니다. 예를 들어, 객체 배열을 수락하는 메소드에 전달하는 경우 Object... 그것은 배열이 vararg 배열 또는 vararg 배열의 요소로 전달되어야한다는 것을 의미합니까? 과부하가 발생하면 더욱 복잡해집니다. 오토 옥싱은 과부하와 비슷한 모호성 문제가 있습니다. 이 두 가지 문제에 대한 해결책은 방법 호출을 해결할 때 먼저 1.5 Pre-5 규칙 (예 :자가 공산 및자가 공사 및 Object... 처리됩니다 Object[]). 메소드 호출을 1.5 사전 규칙으로 해결할 수없는 경우에만 새로운 1.5 규칙이 고려됩니다.

다른 팁

표준 라이브러리에는 많은 예가 있습니다

  • java.awt.color는 상류 및 소문자 이름이 동일한 상수를 갖습니다.
  • java.util.calendar의 도입을 감안할 때 java.util.date의 모든 더 이상 사용되지 않은 방법 - 엉망진창!
  • java.util.enumeration은 java.util.iterator가 교체 할 수있는 곳에서 여전히 사용 중입니다
  • 벡터를 인수로 받아들이지 만 java.util.collection에 대한 지원을 추가 할 수있는 스윙 클래스

또 다른 하나는 지금까지 여러 버전에 대해 더 이상 사용되지 않는 모든 클래스와 방법이지만 사라지지 않을 것입니다. 가장 주목할만한 것은 더 이상 사용되지 않는 다양한 스레드 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top