значэнне таго, што пералічэнне ў цяперашні час ўстаноўлена

Гэта павінна быць поўным відавочным, але гэта не так. Ці ёсць спосаб, каб атрымаць значэнне пералічэння, як у прыведзеным ніжэй прыкладзе?

прыклад:

    public enum Numbers
    {
        zero, one, two

    }

//later on
Numbers numbers = Numbers.zero;
// this is the part that I can not figure out the java equivalent of?
int number = numbers.value();

Ці мае гэта сэнс, што я спрабую зрабіць?

0
У ідэальным свеце вы б абнавіць іншую частку, каб выкарыстоўваць пералічэння замест канстант. У рэальным свеце выкарыстанне парадкавага() вельмі старанна, або вызначыць метад Int стан() , які вяртае Int для дзяржавы.
дададзена аўтар user949300, крыніца
У ідэальным свеце вы б абнавіць іншую частку, каб выкарыстоўваць пералічэння замест канстант. У рэальным свеце выкарыстанне парадкавага() вельмі старанна, або вызначыць метад Int стан() , які вяртае Int для дзяржавы.
дададзена аўтар user949300, крыніца
У мяне ёсць пералік, якое адсочвае дзяржаўную машыну, якія працуюць на патоку, і мне трэба значэнне пералічэння як цэлае інтэграваць у іншую яго частка, які выкарыстаў 30-то канстанта Int ня замест пералічэння. :(
дададзена аўтар WIllJBD, крыніца
У мяне ёсць пералік, якое адсочвае дзяржаўную машыну, якія працуюць на патоку, і мне трэба значэнне пералічэння як цэлае інтэграваць у іншую яго частка, які выкарыстаў 30-то канстанта Int ня замест пералічэння. :(
дададзена аўтар WIllJBD, крыніца
^^ «Вяртае парадкавы нумар гэтай канстанты пералічэння (яго становішча ў пералічаных дэкларацыі, у якой пачатковая канстанта прысвойваецца парадкавы нумар, роўным нулю). Большасць праграмістаў не будуць выкарыстоўваць для гэтага метаду.» Я бачыў гэта ў дакументацыі, але гэта не выглядала як тое, што я маючы патрэбу ... Ці з'яўляецца гэта хоць?
дададзена аўтар WIllJBD, крыніца
^^ «Вяртае парадкавы нумар гэтай канстанты пералічэння (яго становішча ў пералічаных дэкларацыі, у якой пачатковая канстанта прысвойваецца парадкавы нумар, роўным нулю). Большасць праграмістаў не будуць выкарыстоўваць для гэтага метаду.» Я бачыў гэта ў дакументацыі, але гэта не выглядала як тое, што я маючы патрэбу ... Ці з'яўляецца гэта хоць?
дададзена аўтар WIllJBD, крыніца
дададзена аўтар rgettman, крыніца
дададзена аўтар rgettman, крыніца
Я прапаную праверыць падручнік Oracle на пералік - Вы б хацелі, каб вызначыць сваю ўласную схему для гэтага, што вы праходзіце ў і забяспечыць паглынальнік, а не спадзявацца на парадкавага.
дададзена аўтар Brian Roach, крыніца
Я прапаную праверыць падручнік Oracle на пералік - Вы б хацелі, каб вызначыць сваю ўласную схему для гэтага, што вы праходзіце ў і забяспечыць паглынальнік, а не спадзявацца на парадкавага.
дададзена аўтар Brian Roach, крыніца
Ну, так як там на самой справе няма такога паняцця, як «каштоўнасць» пералічэнне Я не ведаю, што гэта вам трэба. Гэта было б бліжэй за ўсё да яго, як гэта цэлы лік, якое ставіцца да ўпарадкаванні.
дададзена аўтар Brian Roach, крыніца
Ну, так як там на самой справе няма такога паняцця, як «каштоўнасць» пералічэнне Я не ведаю, што гэта вам трэба. Гэта было б бліжэй за ўсё да яго, як гэта цэлы лік, якое ставіцца да ўпарадкаванні.
дададзена аўтар Brian Roach, крыніца
docs.oracle.com/javase/ 7/дакументы/API/Java/мовы/Enum.html # Ordina & ZWNJ; л() - сказанага, гэта не карысная інфармацыя. Чаму вам трэба ведаць?
дададзена аўтар Brian Roach, крыніца
docs.oracle.com/javase/ 7/дакументы/API/Java/мовы/Enum.html # Ordina & ZWNJ; л() - сказанага, гэта не карысная інфармацыя. Чаму вам трэба ведаць?
дададзена аўтар Brian Roach, крыніца
Вы спрабавалі valueOf ?
дададзена аўтар user195488, крыніца
Вы спрабавалі valueOf ?
дададзена аўтар user195488, крыніца

8 адказы

Гэта, як правіла, лічыцца дрэннай практыкай, каб спадзявацца на парадкавага , паколькі ён заснаваны на парадку пералік канстанты. Лепшым рашэннем было б перадаць інфармацыю кожнаму асобніку. Проста напісаць канструктар і метад, як гэта:

public enum Number {
    ZERO(0), ONE(1), TWO(2);

    private int value;

    private Number(int value) {
        this.value = value;
    }

    public int value() {
        return value;
    }
};

Тады вы выкарыстоўваеце яго, як вы хочаце

Number numbers = Number.ZERO;
int number = numbers.value();

і вам не прыйдзецца турбавацца аб фактычным парадку кода пры даданні Нумар S пазней.

Заўвага: Гэта ідыёматычны ў Java для пералік імёны сінгулярнасць і канстанты павінны быць у верхнім рэгістры.

5
дададзена
дзякуй за адказ, а таксама сэр.
дададзена аўтар WIllJBD, крыніца

Гэта, як правіла, лічыцца дрэннай практыкай, каб спадзявацца на парадкавага , паколькі ён заснаваны на парадку пералік канстанты. Лепшым рашэннем было б перадаць інфармацыю кожнаму асобніку. Проста напісаць канструктар і метад, як гэта:

public enum Number {
    ZERO(0), ONE(1), TWO(2);

    private int value;

    private Number(int value) {
        this.value = value;
    }

    public int value() {
        return value;
    }
};

Тады вы выкарыстоўваеце яго, як вы хочаце

Number numbers = Number.ZERO;
int number = numbers.value();

і вам не прыйдзецца турбавацца аб фактычным парадку кода пры даданні Нумар S пазней.

Заўвага: Гэта ідыёматычны ў Java для пералік імёны сінгулярнасць і канстанты павінны быць у верхнім рэгістры.

5
дададзена
дзякуй за адказ, а таксама сэр.
дададзена аўтар WIllJBD, крыніца

На падставе вашых каментароў здаецца вам неабходна супаставіць цэлалікавых значэнне ў ваш пералік інтэграваць яго ў іншую частку вашага кода.

Замест таго, каб спадзявацца на упарадкаванні вы сапраўды хочаце зрабіць гэта самастойна:

public enum MyEnum {
    ZERO(0), ONE(1), TWO(2);

    private int mapping;

    MyEnum(int mapping) {
        this.mapping = mapping;
    }

    public int getMapping() {
        return mapping;
    }

} 

Затым можна параўнаць з дапамогай:

MyEnum e = MyEnum.ZERO;
if (someInt == e.getMapping()) { ... } 

(Ці нават проста MyEnum.ZERO.getMapping() )

3
дададзена
Я да галасаваў ўсе, бо ўсе яны з'яўляюцца адказамі, але вы былі першым, каб пачаць дапамагаць, і я дзякую вам за вашу дапамогу, так што я прыняў твой.
дададзена аўтар WIllJBD, крыніца

На падставе вашых каментароў здаецца вам неабходна супаставіць цэлалікавых значэнне ў ваш пералік інтэграваць яго ў іншую частку вашага кода.

Замест таго, каб спадзявацца на упарадкаванні вы сапраўды хочаце зрабіць гэта самастойна:

public enum MyEnum {
    ZERO(0), ONE(1), TWO(2);

    private int mapping;

    MyEnum(int mapping) {
        this.mapping = mapping;
    }

    public int getMapping() {
        return mapping;
    }

} 

Затым можна параўнаць з дапамогай:

MyEnum e = MyEnum.ZERO;
if (someInt == e.getMapping()) { ... } 

(Ці нават проста MyEnum.ZERO.getMapping() )

3
дададзена
Я да галасаваў ўсе, бо ўсе яны з'яўляюцца адказамі, але вы былі першым, каб пачаць дапамагаць, і я дзякую вам за вашу дапамогу, так што я прыняў твой.
дададзена аўтар WIllJBD, крыніца

Вы можаце выкарыстоўваць парадкавых() <�код /> метад. Тым не менш, гэта <�ет> збянтэжаны/рызыкоўныя , так як калі вы калі-небудзь змяніць парадак або аранжыроўкі вашых пералічэнняў, ён пацерпіць няўдачу. напрыклад, вы зменіце паўнамоцтвы два

public enum Numbers {
   zero, one, two, four
}

Затым four.ordinal() будзе 3.

Калі вы сапраўды хочаце нумар, звязаны з пералікам, вы павінны вызначыць свой уласны метад, напрыклад <�Код> парадак() або любы іншы. У першапачатковай рэалізацыі ён можа вярнуцца парадкавы() , але, калі вы дадаеце чатыры у будучыні, вы можаце абнавіць гэты метад.

пастскрыптум Стандартны стыль капіталізаваць пералічэння, напрыклад, Нуль, адзін, і г.д ...

2
дададзена
У ідэале я б да гэтага часу вызначыць метад Int стан() , але з выкарыстаннем парадкавага памяркоўная.
дададзена аўтар user949300, крыніца
Дзякуй, гэта тое, што мне трэба. Фактычная emun я выкарыстоўваю не нуль, адзін, два, тры, ён 30something якія адрозніваюцца станаў, і для маёй часткі яго, па меншай меры, ўпарадкаванне гэтага Enum ніколі не будзе змяняцца.
дададзена аўтар WIllJBD, крыніца

Вы можаце выкарыстоўваць парадкавых() <�код /> метад. Тым не менш, гэта <�ет> збянтэжаны/рызыкоўныя , так як калі вы калі-небудзь змяніць парадак або аранжыроўкі вашых пералічэнняў, ён пацерпіць няўдачу. напрыклад, вы зменіце паўнамоцтвы два

public enum Numbers {
   zero, one, two, four
}

Затым four.ordinal() будзе 3.

Калі вы сапраўды хочаце нумар, звязаны з пералікам, вы павінны вызначыць свой уласны метад, напрыклад <�Код> парадак() або любы іншы. У першапачатковай рэалізацыі ён можа вярнуцца парадкавы() , але, калі вы дадаеце чатыры у будучыні, вы можаце абнавіць гэты метад.

пастскрыптум Стандартны стыль капіталізаваць пералічэння, напрыклад, Нуль, адзін, і г.д ...

2
дададзена
У ідэале я б да гэтага часу вызначыць метад Int стан() , але з выкарыстаннем парадкавага памяркоўная.
дададзена аўтар user949300, крыніца
Дзякуй, гэта тое, што мне трэба. Фактычная emun я выкарыстоўваю не нуль, адзін, два, тры, ён 30something якія адрозніваюцца станаў, і для маёй часткі яго, па меншай меры, ўпарадкаванне гэтага Enum ніколі не будзе змяняцца.
дададзена аўтар WIllJBD, крыніца

Гэта залежыць ад таго, што вам трэба. Вось 2 варыянту выкарыстання:

1) Вы, верагодна, трэба праверыць значэнне пры ўваходным «Лічбы». Для гэтага выпадку выкарыстання, перамыкач выпадак з'яўляецца лепшым рашэннем.

void myMethod(Numbers n){

  switch(n){
    case zero:
    //do something
    break;

    case one:
    //do something
    break;

    //etc.
  }
}

2) Вы можаце calso трэба прысвоіць значэнне кожны нумар і быць у стане атрымаць яго. Для гэтага выпадку выкарыстання, вы можаце вызначыць канструктар для пералічэння

public enum Numbers
{
    zero(0), one(1), two(2);

    private int value;

    private Numbers(int value){
      this.value=value;
    }

}

Затым, у вашым кодзе, вы можаце атрымаць гэта значэнне:

void myMethod(Numbers n){
  int value = n.getValue();
  //do something with this value...
}

Апошняе заўвага: Вашы імёны пералічэнняў ня варта Java канвенцыі. Яны павінны быць названыя з загалоўнай літары, і ў канчатковым выніку характар ​​«_». напрыклад: адзін, два, тры, ANOTHER_VALUE

1
дададзена

Гэта залежыць ад таго, што вам трэба. Вось 2 варыянту выкарыстання:

1) Вы, верагодна, трэба праверыць значэнне пры ўваходным «Лічбы». Для гэтага выпадку выкарыстання, перамыкач выпадак з'яўляецца лепшым рашэннем.

void myMethod(Numbers n){

  switch(n){
    case zero:
    //do something
    break;

    case one:
    //do something
    break;

    //etc.
  }
}

2) Вы можаце calso трэба прысвоіць значэнне кожны нумар і быць у стане атрымаць яго. Для гэтага выпадку выкарыстання, вы можаце вызначыць канструктар для пералічэння

public enum Numbers
{
    zero(0), one(1), two(2);

    private int value;

    private Numbers(int value){
      this.value=value;
    }

}

Затым, у вашым кодзе, вы можаце атрымаць гэта значэнне:

void myMethod(Numbers n){
  int value = n.getValue();
  //do something with this value...
}

Апошняе заўвага: Вашы імёны пералічэнняў ня варта Java канвенцыі. Яны павінны быць названыя з загалоўнай літары, і ў канчатковым выніку характар ​​«_». напрыклад: адзін, два, тры, ANOTHER_VALUE

1
дададзена