로 변환할 수 있 다음과 같은 코드를 사용하여 제네릭?
-
09-06-2019 - |
문제
난로 변환하는 응용 프로그램을 사용하 Java1.5 이상이 발견되면 다음 방법:
/**
* Compare two Comparables, treat nulls as -infinity.
* @param o1
* @param o2
* @return -1 if o1<o2, 0 if o1==o2, 1 if o1>o2
*/
protected static int nullCompare(Comparable o1, Comparable o2) {
if (o1 == null) {
if (o2 == null) {
return 0;
} else {
return -1;
}
} else if (o2 == null) {
return 1;
} else {
return o1.compareTo(o2);
}
}
최고의 비디오 플레이 방법을 두 비교 대상의 동일한 유형이 가능한 변환이 어떻게?
나는 생각은 다음과 같은 것 하:
protected static <T extends Comparable> int nullCompare(T o1, T o2) {
하지만 그것은 실패를 제거에 경고 IntelliJ"선택 호출'compareTo(T)'회원으로서의 원형 java.랭.교'"라인:
return o1.compareTo(o2);
해결책
그것을 변경하기:
protected static <T extends Comparable<T>> int nullCompare(T o1, T o2) {
당신이 필요하기 때문에 비교 자체입니다.
다른 팁
여기에 이상한 경우:
static class A {
...
}
static class B extends A implements Comparable<A> {
public int compareTo(A o) {
return ...;
}
}
다행히 같은 코드 위 드물지만,nullCompare()이 지원하지 않을 비교 Bs 지 않는 한 명시하는 대등한이 적용될 수 있습 T 나 모든 수퍼 클래스 그:
protected static <T extends Comparable<? super T>> int nullCompare(T o1, T o2) {
비록 대부분의 사람들이 결코 이익을 위에서 조정할 수 있고,편리하게 올 때는 디자인에 대한 Api 를 수출 라이브러리입니다.
편집할 수 없습니다 그래서 나는 나의 대답이다.
당신이 선언할 필요가 중첩된 입력 매개변수 이후의 비교는 일반입니다.
protected static <T extends Comparable<? super T>> int nullCompare(T o1, T o2) {
시 비< ?슈퍼 T>, 하게 더 많은 유연합니다.당신이 볼 것 같은 방법을 정의에서 컬렉션이 있습니다.종류
public static <T extends Comparable<? super T>> void sort(List<T> list) {
나는 확실하지 않다는 genericizing 이 방법을 의미가 있습니다.현재 방법에는 모든 종류의 비교;는 경우 genericize 그것은 당신이 그것을 구현하기 위해(정확히 동일한 코드)여러 번 나옵니다.때때로 비교 가능하 두 개체가 없는 일반적인 상,그리고 어떤 일반 버전에 이것을 허용하지 않을 것이다.
을 추가하여 제네릭지 추가해 안전하는 코드어떤 문제가의 안전에 발생한 호출 compareTo.내가 제안하는 것은 단순히 억제하는 경고합니다.그것은 정말 경고 당신은 아무것도에 대한 유용합니다.
더욱 일반적으로,당신은 허용할 수 있을 일에 대한 두 개의 다른 유형이 있습니다.=P
/**
* Compare two Comparables, treat nulls as -infinity.
* @param o1
* @param o2
* @return -1 if o1<o2, 0 if o1==o2, 1 if o1>o2
*/
protected static <T> int nullCompare(Comparable<? super T> o1, T o2) {
if (o1 == null) {
if (o2 == null) {
return 0;
} else {
return -1;
}
} else if (o2 == null) {
return 1;
} else {
return o1.compareTo(o2);
}
}