Mam sytuację, która według mnie jest dość powszechna. Mam enum Java:Bezpieczne wyliczanie niestandardowych atrybutów w systemie Android
public enum Flavour { CHOCOLATE, STRAWBERRY }
Mam atrybutu niestandardowego zdefiniowane w attrs.xml:
<attr name="flavour">
<enum name="chocolate" value="0" />
<enum name="strawberry" value="1" />
</attr>
Ale to czuje się bardzo krucha. Opiera się na mnie ręcznie mapowanie z atrybutu do enum poprawnie.
Jeśli ktoś doda "SARDINE" na końcu Enum Flavour, to oczywiście nie zostanie automatycznie dodany do definicji atrybutu. To wystarczy.
Co gorsza, jeśli ktoś doda "SARDINE" w środku enum, przerwie układy XML, które używają "truskawki".
Jak ludzie to przezwyciężą? Zastanawiałem się, za pomocą ciąg (i przy użyciu Flavour.valueOf()
), ale miałem nadzieję, że nie może być czystsze rozwiązanie tam.
Cóż, wspomniałem to podejście w moim pytaniu jako możliwe obejście, ale po pierwsze rezygnuje ze wszystkich zalet używania niestandardowego atrybutu. Z twoją implementacją, jeśli ktoś ustawi wartość "choclate", to w tajemniczy sposób zostanie ustawiony na TRUSSBERRY w czasie wykonywania. Inna implementacja może rzucić wyjątek na niezrównaną wartość, ale jest to sprawdzanie w czasie wykonywania, podczas gdy niestandardowe atrybuty umożliwiają sprawdzanie kompilacji. – Martin