Collections.max () 서명에서 T가 Object에 묶여있는 이유는 무엇입니까?
Java 7의 java.util.Collections
클래스 구현을 살펴 보고 이해가 안되는 것을 보았습니다. 에서 max
함수 서명, 왜 T
에 묶여 Object
?
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {
Iterator<? extends T> i = coll.iterator();
T candidate = i.next();
while (i.hasNext()) {
T next = i.next();
if (next.compareTo(candidate) > 0)
candidate = next;
}
return candidate;
}
max
Object bound가 생략되면 잘 작동하는 것 같습니다.
public static <T extends Comparable<? super T>> T max(Collection<? extends T> coll) {
Iterator<? extends T> i = coll.iterator();
T candidate = i.next();
while (i.hasNext()) {
T next = i.next();
if (next.compareTo(candidate) > 0)
candidate = next;
}
return candidate;
}
실제로 경계가 차이를 만드는 상황이 있습니까? 그렇다면 구체적인 예를 제공하십시오.
두 사람은 같은 경계를 가지고 있지만이 있다 미묘한 차이.
<T extends Object & Comparable<? super T>>
이것은 언더 삭제 T
가 될 것 Object
입니다.
<T extends Comparable<? super T>>
이 원인이됩니다 T
되기 위해 Comparable
삭제 아래에.
이 경우 .max
Java 5보다 이전 이기 때문에 수행 됩니다. 이 링크에서 Joachim .max
은 Java 1.4.2 의 서명 이 다음과 같음을 친절하게 제공했습니다 .
public static Object max(Collection coll)
<T extends Comparable<? super T>>
경계로 사용했다면 서명은 다음과 같습니다.
public static Comparable max(Collection coll)
API가 깨질 것입니다. 이전 API를 일반 API로 변환하는 방법에 대해 설명하는 이 페이지 를 찾았 .max
으며 특정 예제로 제공 됩니다.
여기에서는 왜 이렇게 max
정의 되었는지 설명합니다 .
또한 수정 된 API가 이전 클라이언트와 바이너리 호환성을 유지하는지 확인해야합니다. 이는 API 삭제가 원래의 비정상 API와 동일해야 함을 의미합니다. 대부분의 경우 이것은 자연스럽게 빠지지만 미묘한 경우가 있습니다. 우리가 만난 가장 미묘한 사례 중 하나 인 method를 살펴 보겠습니다
Collections.max()
. 와일드 카드를 사용한 더 많은 재미 섹션에서 보았 듯이 그럴듯한 서명max()
은 다음과 같습니다.
public static <T extends Comparable<? super T>> T max(Collection<T> coll)
이 서명의 삭제public static Comparable max(Collection coll)
가 max ()의 원래 서명과 다른 점을 제외하면 괜찮습니다 .public static Object max(Collection coll)
확실히 max ()에 대해이 서명을 지정할 수 있었지만 완료되지 않았으며 Collections.max ()를 호출하는 모든 이전 바이너리 클래스 파일은 Object를 반환하는 서명에 의존합니다.
'Program Tip' 카테고리의 다른 글
여러 데이터베이스 엔진에서 사용할 수있는 공통 형식의 데이터가있는 샘플 데이터베이스는 어디에서 찾을 수 있습니까? (0) | 2020.11.05 |
---|---|
WPF에서 인쇄 /보고하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.05 |
ApplicationContextAware는 Spring에서 어떻게 작동합니까? (0) | 2020.11.05 |
IPython / Jupyter 노트북을 PDF로 저장할 때 발생하는 문제 (0) | 2020.11.05 |
사용하지 않는 문자열의 컴파일러 최적화에 대한 일관성없는 동작 (0) | 2020.11.05 |