public T getValue() {
    T resolvedValue = resolveValue();
    if (log.isDebugEnabled()) {
      log.debug("Resolved value for property {}={}", key, resolvedValue);
    }
    return resolveValue();
  }
@Test
  void testResolveValueWithoutOverride() {
    byte defaultByteValue = 9;
    short defaultShortValue = 9;
    long defaultLongValue = 9;
    int defaultIntValue = 9;
    float defaultFloatValue = 9.0f;
    double defaultDoubleValue = 9.0;
    boolean defaultBooleanValue = false;
    String defaultStringValue = "bar";
    ConfigOption<String> testStrConf =
        ConfigOption.<String>builder()
            .key("foo")
            .typeParameterClass(String.class)
            .description("foo foo.")
            .defaultValue(defaultStringValue)
            .build();
    ConfigOption<Integer> testIntConf =
        ConfigOption.<Integer>builder()
            .key("fooint")
            .typeParameterClass(Integer.class)
            .description("foo foo.")
            .defaultValue(defaultIntValue)
            .build();
    ConfigOption<Short> testShortConf =
        ConfigOption.<Short>builder()
            .key("fooshort")
            .typeParameterClass(Short.class)
            .description("foo foo.")
            .defaultValue(defaultShortValue)
            .build();
    ConfigOption<Long> testLongConf =
        ConfigOption.<Long>builder()
            .key("foolong")
            .typeParameterClass(Long.class)
            .description("foo foo.")
            .defaultValue(defaultLongValue)
            .build();
    ConfigOption<Boolean> testBooleanConf =
        ConfigOption.<Boolean>builder()
            .key("foobool")
            .typeParameterClass(Boolean.class)
            .description("foo foo.")
            .defaultValue(defaultBooleanValue)
            .build();
    ConfigOption<Float> testFloatConf =
        ConfigOption.<Float>builder()
            .key("foofloat")
            .typeParameterClass(Float.class)
            .description("foo foo.")
            .defaultValue(defaultFloatValue)
            .build();
    ConfigOption<Double> testDoubleConf =
        ConfigOption.<Double>builder()
            .key("foodouble")
            .typeParameterClass(Double.class)
            .description("foo foo.")
            .defaultValue(defaultDoubleValue)
            .build();
    ConfigOption<Byte> testByteConf =
        ConfigOption.<Byte>builder()
            .key("foobyte")
            .typeParameterClass(Byte.class)
            .description("foo foo.")
            .defaultValue(defaultByteValue)
            .build();
    Assertions.assertEquals(defaultStringValue, testStrConf.getValue());
    Assertions.assertEquals(defaultIntValue, testIntConf.getValue());
    Assertions.assertEquals(defaultLongValue, testLongConf.getValue());
    Assertions.assertEquals(defaultBooleanValue, testBooleanConf.getValue());
    Assertions.assertEquals(defaultFloatValue, testFloatConf.getValue());
    Assertions.assertEquals(defaultByteValue, testByteConf.getValue());
    Assertions.assertEquals(defaultShortValue, testShortConf.getValue());
    Assertions.assertEquals(defaultDoubleValue, testDoubleConf.getValue());
  }