2013-04-10 3 views
2

두 개의 정수 멤버가있는 클래스가 있습니다. 이 멤버는 블록 번호와 오프셋 번호입니다. 나는이 계급의 두 가지 경우를 크거나 작은 징후와 비교할 필요가있다. 예를 들어;Java 클래스의 두 인스턴스 비교

instance1.blockNumber < instance2.blockNumber; 

또는

instance1.blockNumber = instance2.blockNumber; 
instance1.offset < instance2.offset; 

은 내가 아는 한 자바 연산자 오버로딩을 지원하지 않는 경우

instance1 < instance2 

문은 true를 반환해야합니다. 어떻게 이렇게 비교할 수 있습니까?

+2

당신은'Comparable' 인터페이스를 구현할 수 있습니다 사용할 수 있습니다. 그래도'instance1 를 쓸 수는 없지만'instance1.compareTo (instance2) <0'라고 써야합니다. –

답변

4

클래스에 compareTo 메서드를 제공하는 Comparable 인터페이스를 구현하도록합니다. 그런 다음 if 문에서 숫자 값을 -1 (더 적은 경우는 1, 같음은 0)으로 사용할 수 있습니다.

이러한 개체를 목록에 넣으려면 (예 : 정렬의 경우) @Override.equals 메서드도 있어야합니다.

import java.util.Comparable; 

public class BlockOffset implements Comparable<BlockOffset> 
{ 
    private int blockNumber; 
    private int offset; 

    @Override 
    public int compareTo(BlockOffset instance2) { 
    if (this.blockNumber < instance2.blockNumber) return -1; 
    if (this.blockNumber > instance2.blockNumber) return 1; 
    if (this.offset < instance2.offset) return -1; 
    if (this.offset > instance2.offset) return 1; 

    return 0; 
    } 
} 
5

클래스 유형이 자신의 코드 인 경우 Comparable을 구현하고 논리를 작성할 수있는 곳을 compareTo 메소드로 정의 할 수 있습니다. 그런 다음 compareTo을 사용하여 비교할 수 있습니다.

+0

>, <부호를 사용할 수 있습니까? –

+0

아니요, 그렇게 할 수 없습니다. –

+0

@ 맨 위로 이동 아니요, Java에서 '<' and '>'을 (를) 오버로드 할 수 없으면'compareTo() '를 사용해야합니다. – Keppil

0

당신이 구현하고 comparable 또는 comparator

관련 문제