code: public <T> T getAttribute(String name, Class<T> type, T defaultValue)
    {
      Params.notNullOrEmpty(name, "Attribute name");
      Params.notNull(type, "Attribute type");
      String value = attributes.get(name);
      return value != null ? converter.asObject(value, type) : defaultValue;
    }
docs: Get attribute value converted to requested type or default value if there is no attribute with requested name. If
  given default value is null and attribute is not found this method still returns null, that is, the requested
  default value.
  
  @param name attribute name,
  @param type type to converter attribute value to,
  @param defaultValue default value.
  @param <T> type to convert attribute value to.
  @return newly created value object instance or default value.
  @throws IllegalArgumentException if <code>name</code> argument is null or empty.
  @throws IllegalArgumentException if <code>type</code> argument is null.
  @throws ConverterException if there is no converter registered for value type or value parse fails.