다른 클래스에서 열거 형 변수의 값을 어떻게 변경할 수 있습니까?

사용자 3450277

저는 현재 노래 모음을 정렬하라는 프로젝트를 진행하고 있습니다. 이 질문에 제시된 솔루션을 사용하여이를 수행하고 약간 수정합니다. 개체 컬렉션 정렬

import java.util.Comparator;

public class SongComparator implements Comparator<Song> {
    public enum Order {
        YEAR_SORT, RANK_SORT, ARTIST_SORT, TITLE_SORT
    }

    public Order sortingBy;

    @Override
    public int compare(Song song1, Song song2) {
        switch (sortingBy) {
        case YEAR_SORT:
            return Integer.compare(song1.year, song2.year);
        case RANK_SORT:
            return Integer.compare(song1.rank, song2.rank);
        case ARTIST_SORT:
            return song1.artist.compareTo(song2.artist);
        case TITLE_SORT:
            return song1.title.compareTo(song2.title);
        }
        throw new RuntimeException(
                "Practically unreachable code, can't be thrown");
    }

    public void setSortingBy(Order sortBy) {
            this.sortingBy = sortingBy;
    } 
}

정렬 방법의 예 :

public void sortTitle() {
    SongComparator comparator = new SongComparator();
    SongComparator.Order sortingBy = SongComparator.Order.TITLE_SORT;

      Collections.sort(songs2, comparator);
    }

sortingBysortField메서드가 실행될 때 변수 를 변경 하여 올바른 비교 메서드를 실행할 수 있기를 바랍니다. 그러나 메서드에서 정의하는 방식은 클래스 sortingBy의 변수를 전혀 변경하지 않고 변수를 만드는 SongComparator것입니다.

JB 니제

sortingBy비교기 필드를 설정하지 않았습니다 .

comparator.setSortingBy(sortingBy);
Collections.sort(songs2, comparator);

이 값을 생성자 매개 변수로 전달하여 비교기가 항상 유효한 상태인지 확인하고 버그를 재현하지 않는 것이 좋습니다.

SongComparator comparator = new SongComparator(SongComparator.Order.TITLE_SORT);
Collections.sort(songs2, comparator);

그런데이 sortingBy필드는 공개되어서는 안되며 필드에 대한 setter가 없어야 sortingBy합니다.

클래스를 더 쉽고 친숙하게 사용하기 위해 팩토리 메서드를 만들 것입니다.

public static SongComparator byTitle() {
    return new SongComparator(SongComparator.Order.TITLE_SORT);
}

public static SongComparator byYear() {
    return new SongComparator(SongComparator.Order.YEAR_SORT);
}
...

호출자의 코드는 다음과 같습니다.

Collections.sort(songs2, SongComparator.byTitle());

Java 8에서는이 비교기 클래스가 필요하지 않습니다. 당신은 단순히 사용할 수 있습니다

Collections.sort(songs2, Comparator.comparing(Song::getTitle));

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 열거 형에서 열거 형을 어떻게 참조 할 수 있습니까?

분류에서Dev

다른 클래스의 클래스에서 선언 된 변수를 어떻게 얻을 수 있습니까?

분류에서Dev

다른 Java 클래스에 변수가있는 문자열을 어떻게 저장할 수 있습니까?

분류에서Dev

한 클래스에서 다른 클래스로 배열을 어떻게 전달할 수 있습니까?

분류에서Dev

클래스 B에서 다른 클래스 A의 NSArray에 값을 어떻게 추가 할 수 있습니까?

분류에서Dev

Zeppelin에서 zeppelin.xy 형식의 매개 변수 값을 어떻게 변경할 수 있습니까?

분류에서Dev

Kotlin에서 val 유형으로 정의 된 경우 변경 가능한 목록 / 맵 / 배열의 값을 어떻게 변경할 수 있습니까?

분류에서Dev

다른 클래스의 개인 변수 JTextField에 값을 변경하거나 할당하려면 어떻게합니까?

분류에서Dev

C #의 두 가지 다른 클래스에서 동일한 열거 형을 사용할 수 있습니까?

분류에서Dev

r의 다른 값에 따라 데이터 프레임의 값을 어떻게 변경할 수 있습니까?

분류에서Dev

EPPlus에서 ColumnField 열 머리글의 형식을 어떻게 변경할 수 있습니까?

분류에서Dev

이 배열을 (아래 언급 됨) 유형 스크립트에서 다른 하위 배열로 어떻게 변환 할 수 있습니까?

분류에서Dev

Java에서 다른 열거 형에서 선택하는 클래스 속성을 어떻게 만들 수 있습니까?

분류에서Dev

objective-c : 다른 클래스의 변수 나 배열에 어떻게 접근 할 수 있습니까?

분류에서Dev

열거 형 배열에서 열거 형 값의 존재 여부를 어떻게 확인할 수 있습니까?

분류에서Dev

다른 클래스의 클래스에서 변수를 어떻게 사용할 수 있습니까?

분류에서Dev

다른 변수의 이름에 쉘 변수의 확장 값을 어떻게 사용할 수 있습니까?

분류에서Dev

데이터 프레임의 다른 열에 다른 형식을 어떻게 적용 할 수 있습니까?

분류에서Dev

onclick 이벤트에서 다른 클래스로 문자열을 어떻게 전달할 수 있습니까?

분류에서Dev

생성자에서 임의의 열거 형 값을 어떻게 할당 할 수 있습니까?

분류에서Dev

어떻게 슈퍼 클래스의 서브 클래스와 다형성을 할 수 있습니까?

분류에서Dev

C ++에서 객체의 값 유형을 어떻게 변경할 수 있습니까?

분류에서Dev

C의 열거 형 : 기본 변수의 값에 대해 어떤 가정을 할 수 있습니까?

분류에서Dev

DateTime 값의 형식을 어떻게 변경할 수 있습니까?

분류에서Dev

C ++의 다른 템플릿 함수에서 템플릿 클래스에 속하는 중첩 유형을 어떻게 사용할 수 있습니까?

분류에서Dev

Swift에서 날짜 형식을 다른 날짜 형식으로 어떻게 변환 할 수 있습니까?

분류에서Dev

Java에서 다른 클래스의 변수를 어떻게 변경합니까?

분류에서Dev

Simulink에서 .Net 열거 형을 어떻게 사용할 수 있습니까?

분류에서Dev

QString.arg ()에서 열거 형을 어떻게 사용할 수 있습니까?

Related 관련 기사

  1. 1

    다른 열거 형에서 열거 형을 어떻게 참조 할 수 있습니까?

  2. 2

    다른 클래스의 클래스에서 선언 된 변수를 어떻게 얻을 수 있습니까?

  3. 3

    다른 Java 클래스에 변수가있는 문자열을 어떻게 저장할 수 있습니까?

  4. 4

    한 클래스에서 다른 클래스로 배열을 어떻게 전달할 수 있습니까?

  5. 5

    클래스 B에서 다른 클래스 A의 NSArray에 값을 어떻게 추가 할 수 있습니까?

  6. 6

    Zeppelin에서 zeppelin.xy 형식의 매개 변수 값을 어떻게 변경할 수 있습니까?

  7. 7

    Kotlin에서 val 유형으로 정의 된 경우 변경 가능한 목록 / 맵 / 배열의 값을 어떻게 변경할 수 있습니까?

  8. 8

    다른 클래스의 개인 변수 JTextField에 값을 변경하거나 할당하려면 어떻게합니까?

  9. 9

    C #의 두 가지 다른 클래스에서 동일한 열거 형을 사용할 수 있습니까?

  10. 10

    r의 다른 값에 따라 데이터 프레임의 값을 어떻게 변경할 수 있습니까?

  11. 11

    EPPlus에서 ColumnField 열 머리글의 형식을 어떻게 변경할 수 있습니까?

  12. 12

    이 배열을 (아래 언급 됨) 유형 스크립트에서 다른 하위 배열로 어떻게 변환 할 수 있습니까?

  13. 13

    Java에서 다른 열거 형에서 선택하는 클래스 속성을 어떻게 만들 수 있습니까?

  14. 14

    objective-c : 다른 클래스의 변수 나 배열에 어떻게 접근 할 수 있습니까?

  15. 15

    열거 형 배열에서 열거 형 값의 존재 여부를 어떻게 확인할 수 있습니까?

  16. 16

    다른 클래스의 클래스에서 변수를 어떻게 사용할 수 있습니까?

  17. 17

    다른 변수의 이름에 쉘 변수의 확장 값을 어떻게 사용할 수 있습니까?

  18. 18

    데이터 프레임의 다른 열에 다른 형식을 어떻게 적용 할 수 있습니까?

  19. 19

    onclick 이벤트에서 다른 클래스로 문자열을 어떻게 전달할 수 있습니까?

  20. 20

    생성자에서 임의의 열거 형 값을 어떻게 할당 할 수 있습니까?

  21. 21

    어떻게 슈퍼 클래스의 서브 클래스와 다형성을 할 수 있습니까?

  22. 22

    C ++에서 객체의 값 유형을 어떻게 변경할 수 있습니까?

  23. 23

    C의 열거 형 : 기본 변수의 값에 대해 어떤 가정을 할 수 있습니까?

  24. 24

    DateTime 값의 형식을 어떻게 변경할 수 있습니까?

  25. 25

    C ++의 다른 템플릿 함수에서 템플릿 클래스에 속하는 중첩 유형을 어떻게 사용할 수 있습니까?

  26. 26

    Swift에서 날짜 형식을 다른 날짜 형식으로 어떻게 변환 할 수 있습니까?

  27. 27

    Java에서 다른 클래스의 변수를 어떻게 변경합니까?

  28. 28

    Simulink에서 .Net 열거 형을 어떻게 사용할 수 있습니까?

  29. 29

    QString.arg ()에서 열거 형을 어떻게 사용할 수 있습니까?

뜨겁다태그

보관