Pertanyaan Atribut kustom enum yang aman di Android


Saya memiliki situasi yang saya duga cukup umum. Saya memiliki enum Java:

public enum Flavour { CHOCOLATE, STRAWBERRY }

Saya memiliki atribut khusus yang ditentukan di attrs.xml:

<attr name="flavour">
    <enum name="chocolate" value="0" />
    <enum name="strawberry" value="1" />
</attr>

Tapi ini terasa sangat rapuh. Itu bergantung pada saya pemetaan secara manual dari atribut ke enum dengan benar.

Jika seseorang menambahkan "SARDINE" ke ujung enum Flavour maka itu jelas tidak akan secara otomatis ditambahkan ke definisi atribut. Itu cukup adil.

Tapi yang lebih buruk, jika seseorang menambahkan "SARDINE" di tengah enum, itu akan merusak layout xml yang menggunakan "strawberry".

Bagaimana cara orang mengatasi ini? Saya sudah mempertimbangkan menggunakan string (dan menggunakan Flavour.valueOf()), tetapi saya berharap mungkin ada solusi yang lebih bersih di luar sana.


9
2017-09-26 11:21


asal


Jawaban:


Selama Anda menjaga enum Flavor up to date dan sinkron dengan atribut rasa, itu harus baik-baik saja, tetapi jika Anda benar-benar tidak ingin khawatir tentang pesanan maka jangan menggunakan indeks. Sebaliknya pergi dengan Strings seperti yang Anda pertimbangkan.

public enum Flavor {
  CHOCOLATE, STRAWBERRY

  public static Flavor get(String s) {
     s = s.toLowerCase();
     if(s.equals("chocolate")) {
       return CHOCOLATE;
     } else {
       return STRAWBERRY;
     }
  }
}

-3
2017-12-10 14:17