@Override
  public <K, V> Optional<Map<K, V>> getMapProperty(String key, Class<K> keyType, Class<V> valueType) {
    var targetKey = targetPropertyName(key);
    var mapResult = binder.bind(targetKey, Bindable.mapOf(keyType, valueType));
    return mapResult.isBound() ? Optional.of(mapResult.get()) : Optional.empty();
  }
@Test
  void resolvesMapProperties() {
    env.setProperty("prop.0.strMap.k1", "v1");
    env.setProperty("prop.0.strMap.k2", "v2");
    env.setProperty("prop.0.intToLongMap.100", "111");
    env.setProperty("prop.0.intToLongMap.200", "222");

    var resolver = new PropertyResolverImpl(env);
    assertThat(resolver.getMapProperty("prop.0.strMap", String.class, String.class))
        .hasValue(Map.of("k1", "v1", "k2", "v2"));
    assertThat(resolver.getMapProperty("prop.0.intToLongMap", Integer.class, Long.class))
        .hasValue(Map.of(100, 111L, 200, 222L));
  }