switch 문에 열거를 사용하는 Java
이 질문과 유사한 SO에 대한 다양한 Q&A를 살펴봤지만 해결책을 찾지 못했습니다.
제가 가지고 있는 것은 TV 가이드를 보는 다양한 방법을 나타내는 열거형입니다.
NDroid 서 in서Application
표시
static enum guideView {
GUIDE_VIEW_SEVEN_DAY,
GUIDE_VIEW_NOW_SHOWING,
GUIDE_VIEW_ALL_TIMESLOTS
}
...사용자가 뷰를 변경하면 이벤트핸들러가 수신하다int
0 의 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는 자동으로 실행하지 않습니다.여기에는 몇 가지 방법이 있습니다.
- type-safe 열거형이 아닌 static final int 목록을 사용하여 수신한 int 값을 켜십시오(이것은 Java 5 이전 접근법입니다).
- 지정된 id 값(herneryville에서 설명한 바와 같이) 또는 열거값의 서수 값(예:
guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
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의 몇 가지 용도가 마음에 듭니다.
- .name()을 사용하면 String 내의 열거형 이름을 가져올 수 있습니다.
- .ordinal()을 사용하면 0-based 정수값을 얻을 수 있습니다.
- 각 열거형에 다른 값 매개 변수를 연결할 수 있습니다.
- 물론 스위치는 유효합니다.
값 매개 변수가 있는 열거형:
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
'programing' 카테고리의 다른 글
Apache RewriteRule 명령어로 환경변수를 설정할 때 변수 이름 앞에 "REDIRECT_"가 붙는 원인은 무엇입니까? (0) | 2022.09.06 |
---|---|
PHP의 십진수에서 불필요한 0자리 제거 (0) | 2022.09.06 |
bash에서 .sql 스크립트를 실행하는 방법 (0) | 2022.09.06 |
v-model을 사용하여 Vuex 저장소를 수정하시겠습니까? (0) | 2022.09.06 |
"php wartician dump-autoload"와 "composer dump-autoload"의 차이점은 무엇입니까? (0) | 2022.09.06 |