Indizierte Getter

Zusätzlich zu einer indizierten Kollektion von Unterkonfigurationen kann ein indizierter Getter definiert werden, der eine über das Key-Property identifizierte Unterkonfiguration aus der Kollektion zurückliefert. Im folgenden Beispiel kann auf Elemente der indizierten Kollektion sub-configs über getSubConfig(String name) einzeln zugegriffen werden.

public class MyClass {

  public interface Config extends ConfigurationItem {
    String SUB_CONFIGS = "sub-configs";
    @Name(SUB_CONFIGS)
    @Key(SubConfig.NAME)
    Collection<SubConfig> getSubConfigs();

    @Indexed(collection = SUB_CONFIGS)
    SubConfig getSubConfig(String name);
  }

  public interface SubConfig extends ConfigurationItem {
    String NAME = "name";
    @Name(NAME)
    String getName();
  }
}

Hat man die indizierte Kollektion mit abstrakter (und leerer) Unterkonfiguration als Elementtyp definiert, kann man auf eine einzelne abgeleitete Unterkonfiguration über ihre Klasse zugreifen:

public class MyClass {

  public interface Config extends ConfigurationItem {
    String SUB_CONFIGS = "sub-configs";
    @Name(SUB_CONFIGS)
    @Key(ConfigurationItem.CONFIGURATION_INTERFACE_NAME)
    Collection<? extends SubConfig> getSubConfigs();

    @Indexed(collection = SUB_CONFIGS)
    SubConfig getSubConfig(Class<?> subConfigClazz);
  }

  public interface SubConfig extends ConfigurationItem {
  }
}