code: public GinLinkedBindingBuilder<V> addBinding(K key) {
      BindingRecorder recorder = createRecorder();
      if (key instanceof String) {
        recorder.bindConstant().to((String) key);
      } else if (key instanceof Enum<?>) {
        recorder.bindConstant().to((Enum) key);
      } else if (key instanceof Integer) {
        recorder.bindConstant().to((Integer) key);
      } else if (key instanceof Long) {
        recorder.bindConstant().to((Long) key);
      } else if (key instanceof Float) {
        recorder.bindConstant().to((Float) key);
      } else if (key instanceof Double) {
        recorder.bindConstant().to((Double) key);
      } else if (key instanceof Short) {
        recorder.bindConstant().to((Short) key);
      } else if (key instanceof Boolean) {
        recorder.bindConstant().to((Boolean) key);
      } else if (key instanceof Character) {
        recorder.bindConstant().to((Character) key);
      } else if (key instanceof Class<?>) {
        recorder.bindConstant().to((Class<?>) key);
      } else {
        throw new IllegalArgumentException(
            "Key type " + keyType + " is non-constant and can only be added using providers");
      }
      return recorder.bind(valueType);
    }
docs: Returns a binding builder used to add a new entry in the map. Each key must be distinct (and
  non-null). Bound providers will be evaluated each time the map is injected.
  <p>
  It is an error to call this method without also calling one of the {@code to} methods on the
  returned binding builder.
  <p>
  Scoping elements independently is supported. Use the {@code in} method to specify a binding
  scope.