Gerçek enum
türü bilmeden olası değerlerini yinelemem gereken bu problemle karşılaştım .
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
Olası değerlerini enumValue'dan nasıl çıkaracağınıza dair bir fikriniz var mı?
Yanıtlar:
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()
bir enum
nesnede , türün kendisinin bir altenum
türünü döndürebilir (örneğin, enum
sabit, enum
türden bir yöntemi geçersiz kılarsa ). bu sabiti bildiren türü getDeclaringClass()
döndürür, enum
burada istediğiniz şey budur.
Enum
s, Class
yazıldıkları için tıpkı es gibidir . Geçerli kodunuz, parçası olduğu Enum türünü belirtmeden yalnızca Enum olup olmadığını kontrol eder.
Numaralamanın türünü belirtmediğiniz için, enum değerleri listesinin ne olduğunu bulmak için yansıma kullanmanız gerekecektir.
Bunu şu şekilde yapabilirsiniz:
enumValue.getDeclaringClass().getEnumConstants()
Bu, her biri mevcut seçeneklerden biri olan bir Enum nesnesi dizisi döndürür.
enum değer yöntemi
enum.values () yöntemi, tüm enum örneklerini döndürür.
public class EnumTest {
private enum Currency {
PENNY("1 rs"), NICKLE("5 rs"), DIME("10 rs"), QUARTER("25 rs");
private String value;
private Currency(String brand) {
this.value = brand;
}
@Override
public String toString() {
return value;
}
}
public static void main(String args[]) {
Currency[] currencies = Currency.values();
// enum name using name method
// enum to String using toString() method
for (Currency currency : currencies) {
System.out.printf("[ Currency : %s,
Value : %s ]%n",currency.name(),currency);
}
}
}
http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html
Burada Rol, aşağıdaki değerleri [ADMIN, USER, OTHER] içeren bir numaralandırmadır.
List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
System.out.println(role);
});
Bunun gibi java.util.EnumSet de kullanılabilir
@Test
void test(){
Enum aEnum =DayOfWeek.MONDAY;
printAll(aEnum);
}
void printAll(Enum value){
Set allValues = EnumSet.allOf(value.getClass());
System.out.println(allValues);
}