code: public void put(T key, Object value) {
          data.put(key, ensureValueCorrectness(key, value));
      }
docs: Stores given key-value mapping if no restrictions are violated by them.
  @param key mapping key.
  @param value mapping value.
  @throws IllegalArgumentException if the given key is {@code null} or if value is neither of correct type nor of String type.