문제

난로 변환하는 응용 프로그램을 사용하 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&lt;o2, 0 if o1==o2, 1 if o1&gt;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);
    }
  }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top