2014-04-12 2 views
4

현재 Comparable의 개념을 응용 프로그램에 적용하는 과제를 진행 중입니다.Comparable과 Object 유형의 차이점

나는 Comparable[] 배열의 입력을 허용하는이 간단한 방법을 썼다. 이 메소드는 주어진 배열 입력의 최소값을 리턴합니다. .compareTo() 메서드를 사용하여 실제로이 메서드를 확장하여 Point 클래스 (여기서는 할당에 대해 수행했지만 여기서는 표시되지 않음)와 같은 사용자 지정 구현이든 실제로는 개체 유형을 허용 할 수 있습니다.

public static Comparable getMinimum(Comparable[] inputArray) 
{ 
    Comparable newObj = inputArray[0]; 
    for(int i = 0; i < inputArray.length; i++) 
    { 
     Integer retValue = (inputArray[i]).compareTo(newObj); 
     if(retValue < 0) 
     { 
      newObj = inputArray[i]; 
     } 
    } 
    return newObj; 
} 

내 질문은 - 무엇입니까? Comparable 유형입니까? Java API를 살펴보면 실제로 많이 알려지지 않았습니다. Comparable 유형을 유형과 반대로 사용하는 이유는 int, double, String 등과 같은 유형을 포함하는 이유는 무엇입니까?

답변

1

Comparable 유형이 일반이기 때문에 정확하게 어떤 유형이 "비교 가능"인지를 지정하고 유형 안전성을 유지할 수 있으므로 Comparable을 사용합니다. Object 기본 클래스에는 그런 것이 포함되어 있지 않습니다.

또한 Comparable의 일반 버전을 사용하고 있지 않습니다. 그것은 문제입니다. 여러분은 이전의 Comparable 타입을 사용하고 있습니다.

+1

아하이 봐요! 그래서'Comparable'과'Object'의 차이점은 타입 안전하다는 것입니다. 또한, 당신은 당신이 비교할 수있는 유형을 정확히 어디에 명시합니까? – theGreenCabbage

+0

@ theGreenCabbage 이것이 주된 이유입니다. 또한 내가 당신의 코드에서 내가 편집 한 질문에 지적한 것을 발견했다. – AxiomaticNexus

+0

교수님의 답장 키도 더 이상 사용되지 않습니다. 광산이 자기 자신과 닮았 기 때문입니다. 이 작업을 수행하는 비 권장 방법은 무엇입니까? – theGreenCabbage

4

비교 가능한 유형은 C 클래스가 Comparable<C> 인터페이스를 구현하는 참조 유형입니다. 인터페이스는 하나의 메소드 인 int compareTo(<T> other)을 정의합니다. 자세한 내용은 javadoc을 참조하십시오. 프리미티브 타입의 종류를 참조하지 않기 때문에

  • 프리미티브 타입 (예컨대 intdouble)는 그 의미를 Comparable 아니다.

  • 유형 Object은 참조 유형이지만 Comparable<Object>을 구현하지 않으므로 비교할 수 없습니다.

  • 유형 String은 참조 유형이며 Comparable<String>을 구현합니다. 그러므로 그것은 비슷한 유형입니다. 그리고이 말한다 문자열에 대한 javadoc는 분명하다 :

    public final class String extends Object 
        implements Serializable, Comparable<String>, CharSequence 
    

primitive types 및 참조 유형의 차이는 자바에서 기본입니다. 기본 유형은 boolean, byte, char, short, int, long, floatdouble입니다. 참조 유형은 Java 클래스 및 Java 배열 유형입니다.


은 이제 예를 들어, 당신은 실제로 원시 형식으로 Comparable 인터페이스를 사용하고 있습니다. 이 코드를 Java 5 또는 이후 컴파일러로 컴파일하면 원시 유형 사용에 대한 컴파일러 경고가 표시됩니다. 이것은 실질적으로 답을 바꾸지는 않지만 사실상 Comparable<?> 대신에 Comparable<T>을 구현하는 것이 효과적이며 그 방법은 실제로 compareTo(Object)입니다.

+0

기본 유형은 '객체'유형을 의미합니까? – theGreenCabbage

+0

@theGreenCabbage - 아니요. '객체'는 기본 유형이 아닙니다. –

+0

답변에서 Comparable 또는 Object의 차이를 완전히 이해하지 못했습니다./ – theGreenCabbage

0

Comparable은 클래스가 아닌 인터페이스입니다. 인터페이스는 그것을 구현하는 모든 클래스가 인터페이스에 선언 된 메소드의 구현을 갖도록 강제합니다. Comparable 인터페이스는 compareTo라는 메서드를 선언하여 두 개체를 비교합니다 (개체 집합을 정렬하는 데 유용함). 따라서 클래스가 Comparable 인터페이스를 구현하는 경우 해당 클래스의 인스턴스를 비교할 수 있는지를 알 수 있습니다. 개체는 개체 비교를위한 메서드를 선언하지 않습니다. 따라서 두 객체를 직접 비교할 수는 없습니다.

+0

맞아요, 클래스가 아닌 인터페이스입니다. – theGreenCabbage

관련 문제