2011-11-28 2 views
1

BankAccount 클래스를 작성하고 있습니다.이 클래스는 많은 은행 계좌를 배열 목록에 넣고 계좌 번호에 따라 정렬합니다.@ Java에서 compareTo() 메소드를 오버라이드 할 수 없습니다.

내 주요 방법은
public int compareTo(BankAccount another){ 
    if (Integer.parseInt(this.getAccountNumber()) > Integer.parseInt(another.getAccountNumber())) 
     return 1; 
    else if(Integer.parseInt(this.getAccountNumber()) < Integer.parseInt(another.getAccountNumber())) 
     return -1; 
    else 
     return 0; 

, accounts 배열 목록에 대한 변수 다음과 같이 나는 compareTo() 방법을 썼다. 내가하려고하면 Collections.sort(accounts); 할 수 없습니다. 그것은 실제와 형식 인자가 길이가 다르고 "추론 된 타입이 선언 된 바운드 (들)을 따르지 않기 때문에"인자에서 인스턴스화 할 수 없다는 에러를 내게줍니다. 이것은 compareTo() 메서드를 재정의하지 않았기 때문이라고 생각했지만 @Override it을 시도하면 "메서드가 메서드를 재정의하거나 수퍼 유형의 메서드를 구현하지 않습니다"라는 메시지가 표시됩니다. 나는 그 문제가 무엇인지 이해하지 못한다. 어떤 도움을 주시면 감사하겠습니다.

+2

이'BankAccount' 클래스 * 그것은'대등 '구현하는 * 선언합니까? –

답변

9

BankAccount 클래스는 java.lang.Comparable<BankAccount> 인터페이스를 구현해야하며 이는 사용자 코드에 해당하지 않는 것으로 보입니다. 사실 Collection.sortComparable<T> 컬렉션을 인수로 사용하고 있습니다.

+0

그리고 Comparable 만 구현하면 안되며, Comparable 을 구현해야합니다. – user949300

+0

@ user949300 나는 당신이 당신의 코멘트를 제출하기 전에 그것을 깨닫고 편집했다 : – Romain

+0

고마워. 이것은 생명의 은인이었습니다. –

1

클래스가 Comparable 인터페이스를 구현합니까?

public class BankAccount implements Comparable<BankAccount> 
3

클래스 선언은 다음과 같습니다 있는지 확인 클래스가 compareTo 메서드를 재정의하려면 Comparable 인터페이스를 구현해야합니다. compareTo은 기본적으로 java.lang.Object의 일부가 아닙니다.

+0

정말 고마워요. –

3

위해 : 예 당신이 그것을 대신 다른 패키지의 기본 (java.lang.Comparable) 있는지 확인하기 위해 가져 오기를 확인할 수있는 경우

3

클래스가 Comparable을 구현하는 것을 잊어 버린 것 같습니다. 있는지 확인 클래스 선언은 다음과 같습니다

... class BankAccount ... implements Comparable<BankAccount>

+0

감사합니다. 이것은 정말로 도움이되었습니다. –

+1

@DylanBroussard 관련 메모에서'@ Override'를 사용하면 컴파일러가 메소드가 실제로 수퍼 클래스에서 무언가를 무시하거나 인터페이스 메소드를 구현하는지 여부를 확인하는 효과 만 있습니다. 다른 기능적 결과는 없습니다. 그 주석의 전체 의도는 정확히 당신이 만난 종류의 오류를 잡는 것입니다. –

관련 문제