code: @SuppressWarnings("unchecked")
      public <E> Optional<E> getValue(String key) {
          if (this.properties == null) {
              return Optional.empty();
          }
          return Optional.ofNullable((E) getProperties().get(key));
      }
docs: Returns a value that has been stored using
  {@link #setValue(String, Object)}. As this method is generic, the value
  will automatically be casted to the target type of the expression in
  which this method is called. So this method has to be used with caution
  in respect to type safety.
  
  @param <E> Type of the resulting value.
  @param key The key of the value to retrieve.
  @return The value or an empty optional if the value does not exist.
  @since 3.0.0
  @see #getValueAs(String, Class)