programing

switch 문에 열거를 사용하는 Java

goodsources 2022. 9. 6. 22:36
반응형

switch 문에 열거를 사용하는 Java

이 질문과 유사한 SO에 대한 다양한 Q&A를 살펴봤지만 해결책을 찾지 못했습니다.

제가 가지고 있는 것은 TV 가이드를 보는 다양한 방법을 나타내는 열거형입니다.

NDroid 서 in서Application 표시

static enum guideView {
    GUIDE_VIEW_SEVEN_DAY,
    GUIDE_VIEW_NOW_SHOWING,
    GUIDE_VIEW_ALL_TIMESLOTS
}

...사용자가 뷰를 변경하면 이벤트핸들러가 수신하다int0 의 2 의 경우

의 경우 ★★★★Activity onClick(DialogInterface dialog, int which) 핸들러

// 'which' is an int from 0-2
switch (which) {
    case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
    ...
    break;
}

C# enums와 select/case 스테이트먼트에 익숙해져 있습니다.또, Java가 다른 것을 하고 있는 것은 알고 있습니다만, 무엇을 할 필요가 있는지 이해할 수 없습니다.

가가 to to ?if 어떻게할 수 요.선택지가 3개밖에 없을 것 같아서 할 수 있었는데, 자바에서는 스위치 케이스로 어떻게 할 수 있을까 궁금했어요.

편집: 일반적인 Java 문제로 보고 있었기 때문에 문제를 완전히 확장하지 못했습니다.조금 더 설명을 드리려고 질문을 추가했습니다.

붙이지 만, 은 Android에 .Application 및 않는 는 " " "에 .Activity열거형은 여러 액티비티에서 액세스해야 하므로 정적입니다.

누락된 부분은 정수를 안전한 열거형으로 변환하는 것입니다.Java는 자동으로 실행하지 않습니다.여기에는 몇 가지 방법이 있습니다.

  1. type-safe 열거형이 아닌 static final int 목록을 사용하여 수신한 int 값을 켜십시오(이것은 Java 5 이전 접근법입니다).
  2. 지정된 id 값(herneryville에서 설명한 바와 같이) 또는 열거값의 서수 값(예: guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
  3. int 값으로 나타나는 열거값을 확인한 후 열거값을 켭니다.

    enum GuideView {
        SEVEN_DAY,
        NOW_SHOWING,
        ALL_TIMESLOTS
    }
    
    // Working on the assumption that your int value is 
    // the ordinal value of the items in your enum
    public void onClick(DialogInterface dialog, int which) {
        // do your own bounds checking
        GuideView whichView = GuideView.values()[which];
        switch (whichView) {
            case SEVEN_DAY:
                ...
                break;
            case NOW_SHOWING:
                ...
                break;
        }
    }
    

    더될 도 있고 가 덜 날.valueOf적절한 열거값을 해결하기 위한 인수로 정수값을 사용하고 경계 검사를 중앙 집중화할 수 있는 구현입니다.

ifwhichView「GuideViewEnum」, 「GuideViewEnum」, 「GuideViewEnum」, 「GuideViewEnum」, 「GuideViewEnum」을 참조해 주세요. 하다 하세요.case.

switch (whichView) {
    case SEVEN_DAY:
        ...
        break;
    case NOW_SHOWING:
        ...
        break;
}

있는 라벨 되어 있지 .NDroid.guideView.GUIDE_VIEW_SEVEN_DAY대신 자격을 삭제하고 사용해야 합니다.GUIDE_VIEW_SEVEN_DAY

Java enum의 몇 가지 용도가 마음에 듭니다.

  1. .name()을 사용하면 String 내의 열거형 이름을 가져올 수 있습니다.
  2. .ordinal()을 사용하면 0-based 정수값을 얻을 수 있습니다.
  3. 각 열거형에 다른 값 매개 변수를 연결할 수 있습니다.
  4. 물론 스위치는 유효합니다.

값 매개 변수가 있는 열거형:

    enum StateEnum {
        UNDEFINED_POLL  ( 1 * 1000L,       4 * 1000L),
        SUPPORT_POLL    ( 1 * 1000L,       5 * 1000L),
        FAST_POLL       ( 2 * 1000L,  4 * 60 * 1000L),
        NO_POLL         ( 1 * 1000L,       6 * 1000L); 
        ...
    }

스위치의 예:

private void queuePoll(StateEnum se) {
    // debug print se.name() if needed
    switch (se) {
        case UNDEFINED_POLL:
            ...
            break;
        case SUPPORT_POLL:
            ...
            break;

이것은 당신이 설명한 대로 작동해야 합니다.어떤 오류가 발생합니까?암호를 붙여넣을 수 있다면 도움이 될 거야

http://download.oracle.com/javase/tutorial/java/javaOO/enum.html

EDIT: 정적 열거를 정의하시겠습니까?그건 옳지 않은 것 같아.열거형은 다른 개체와 매우 유사합니다.코드가 컴파일되어 실행되지만 잘못된 결과가 나오는 경우, 이것이 원인일 수 있습니다.

짧은 연관 함수의 예:

public String getIcon(TipoNotificacao tipo)
{
    switch (tipo){
        case Comentou : return "fa fa-comments";
        case ConviteEnviou : return "icon-envelope";
        case ConviteAceitou : return "fa fa-bolt";
        default: return "";
    }
}

@Dhanushka가 말했듯이 "switch" 안에 있는 수식자를 생략하는 것이 핵심입니다.

enumerations accessing is very simple in switch case

private TYPE currentView;

//declaration of enum 
public enum TYPE {
        FIRST, SECOND, THIRD
    };

//handling in switch case
switch (getCurrentView())
        {
        case FIRST:
            break;
        case SECOND:
            break;
        case THIRD:
            break;
        }

//getter and setter of the enum
public void setCurrentView(TYPE currentView) {
        this.currentView = currentView;
    }

    public TYPE getCurrentView() {
        return currentView;
    }

//usage of setting the enum 
setCurrentView(TYPE.FIRST);

avoid the accessing of TYPE.FIRST.ordinal() it is not recommended always

이렇게 하고 있어요.

public enum State
{
    // Retrieving, // the MediaRetriever is retrieving music //
    Stopped, // media player is stopped and not prepared to play
    Preparing, // media player is preparing...
    Playing, // playback active (media player ready!). (but the media player
                // may actually be
                // paused in this state if we don't have audio focus. But we
                // stay in this state
                // so that we know we have to resume playback once we get
                // focus back)
    Paused; // playback paused (media player ready!)

    //public final static State[] vals = State.values();//copy the values(), calling values() clones the array

};

public State getState()
{
        return mState;   
}

Switch 스테이트먼트에서 사용

switch (mService.getState())
{
case Stopped:
case Paused:

    playPause.setBackgroundResource(R.drawable.selplay);
    break;

case Preparing:
case Playing:

    playPause.setBackgroundResource(R.drawable.selpause);
    break;    
}

언급URL : https://stackoverflow.com/questions/8108980/java-using-enum-with-switch-statement

반응형