У меня есть пул многих параметров конфигурации, и у каждого параметра конфигурации есть пул параметров конфигурации. В идеале я хочу иметь возможность установить параметр, используя что-то вроде sendConfiguration (ID, OPTION).
Вот класс Configuration. Это перечисление, которое отображает идентификатор конфигурации на набор параметров, доступных для этой конфигурации. Сейчас мы просто предположим, что у нас есть конфигурация для настройки яркости.
public enum Configuration {
BRIGHTNESS(166, BrightnessConfigOptions.values());
private int configurationID;
private ConfigOption[] configOptions;
Configuration(int configurationID, ConfigOption[] configOptions) {
this.configurationID = configurationID;
this.configOptions = configOptions;
}
public int getConfigurationID() { return configurationID; }
public ConfigOption[] getConfigOptions() { return configOptions; }
}
BrightnessConfigOptions выглядит следующим образом:
public enum BrightnessConfigOptions implements ConfigOption {
DARK(1),
NORMAL(2),
BRIGHT(3),
VERY_BRIGHT(4);
private int configValue;
BrightnessConfigOptions(int configValue) {
this.configValue = configValue;
}
@Override
public int getConfigValue() { return configValue; }
}
А интерфейс ConfigOption выглядит следующим образом:
public interface ConfigOption {
int getConfigValue();
}
Итак, в качестве примера, желаемое использование будет:
sendConfiguration(Configuration.BRIGHTNESS, Configuration.BRIGHTNESS.getConfigOptions().DARK)
...
void sendConfiguration(Configuration configuration, ConfigOption configOption) {
System.out.println(configuration.getConfigurationID());
System.out.println(configOption.getConfigValue());
}
Этот код работает неправильно, потому что getConfigOptions
возвращает ConfigOption[]
, и поэтому я не знаютипа, поэтому я не могу написать .DARK
без предварительного приведения.
Либо мой дизайн здесь неправильный, либо я забыл что-то синтаксическое, что сделало бы это намного проще. Как мне сделать так, чтобы набор текста работал элегантно?