Я использую несколько компонентов, которые не могу отредактировать, моя ситуация такая:
private enum Radio {
SPACE(" "),
PLUS("+"),
MINUS("-");
private String value;
private Radio(final String value) {
this.value = value;
}
public static void setSelection(final CodeEntry entry, final String flag) {
entry.getButtonWhite().setSelection(flag.equals(SPACE.value));
entry.getButtonGreen().setSelection(flag.equals(PLUS.value));
entry.getButtonRed().setSelection(flag.equals(MINUS.value));
}
}
Мне это не нравится. Я хочу связать кнопку с перечислением. Все остальное не соответствует действительности, если не сказать больше. Но я не знаю, как
private enum Radio {
SPACE(" ", CodeEntry::getButtonWhite),
PLUS("+", CodeEntry::getButtonGreen),
MINUS("-", CodeEntry::getButtonRed);
...
static reference to the non-static method getButtonWhite()
То, что я хочу, это что-то вроде accept(T t)
. Поэтому я даю getter в качестве параметра конструктора, затем вызываю этот getter для объекта с enum.accept(t)
, например так:
private enum Radio {
SPACE(" ", CodeEntry::getButtonWhite),
PLUS("+", CodeEntry::getButtonGreen),
MINUS("-", CodeEntry::getButtonRed);
setSelection(final CodeEntry entry, final String flag) {
// Button button = Radio.valueOf(flag).accept(entry);
// button.setSelection(true);
Radio.valueOf(flag).accept(entry).setSelection(true);
}
Я не уверен, возможно ли это, и синтаксис вродепобедить меня.
Ограничения моего примера
Хотя я ценю любой работоспособный ответ, я не могу изменить следующие вещи, поэтому я приму только ответ, помеченный следующим:
Флаг является строкой и будет строкой независимо от того, что.
Записи будут иметь getButtonX, который не изменится.
Я использую Java 8, это не изменится.
Я хочу связать геттер с перечислением, это должен быть параметр конструктора.