Java Reflection был бы возможен, но это было бы довольно медленно, так как вам нужно перебирать все поля, чтобы получить значение с правильным значением.
Еще одно предложение:
enum KeyCode {
A(23),
...;
private int code;
private static final Map<Integer, KeyCode> keys = new HashMap<Integer, KeyCode>();
static {
for(KeyCode code : values()) {
keys.put(code.code, code);
}
}
private KeyCode(int code) {
this.code = code;
}
public static KeyCode getKey(int code) {
return keys.get(code);
}
}
Это позволяет просто делать ...
KeyCode code = KeyCode.getCode(23);
String name = code.name(); // assuming not null here, should be "A"
Это было бы довольно быстро, и т.д. Но, конечно, другой вопрос будет, если вы не можете использовать существующую структуру. Насколько я знаю, Swing уже делает некоторые ключевые отображения, например.
Edit:
Хорошо, как вы, кажется, должны использовать предопределенные class, отражение на самом деле, кажется, единственный путь ... Этот метод позволит вам получить карту всего поля имена по значению.
public static Map<Object, String> getFieldsByValue(Class<?> clz) {
Map<Object, String> map = new HashMap<Object, String>();
// Remember: Class.getField() returns only PUBLIC fields
for (Field field : clz.getFields()) {
// Check if it's a static variable
if (Modifier.isStatic(field.getModifiers())) {
// Add other checks, for example for "integer", if you want.
try {
// field.get(null) returns the value of the field for a static field
map.put(field.get(null), field.getName());
} catch (IllegalArgumentException e) {
// should not happen, as we made sure the field is static
} catch (IllegalAccessException e) {
// should not happen, as we only listed public fields
}
}
}
return map;
}
Вы можете вызвать этот метод один раз в статической инициализации блока (смотри пример выше), чтобы создать карту один раз, а затем получить доступ к нему, что делает выполнения лучше:
static {
keyMap = getFieldsByValue(com.vaadin.event.ShortcutAction.KeyCode.class);
// example
String name = keyMap.get(23); // should be "A"
}
вы реализуете свой собственный коллекция, например 'Map' :) – Satya
использует' HashMap' (или любую реализацию 'Map') и ставит значения типа' map.put («A», 23) '. Чтобы получить значение 'map.get (« A »)', возвращает '23' –