inline fun JSONObject.putNullable(key: String, value: T?, write: JSONObject.(String, T) -> JSONObject) = if (value == null) put(key, JSONObject.NULL) else write(key, value) /* Overload resolution ambiguity e: JSONObjects.kt: (19, 103): Overload resolution ambiguity: public open fun put(name: kotlin.String!, value: kotlin.Any!): org.json.JSONObject! defined in org.json.JSONObject public open fun put(name: kotlin.String!, value: kotlin.Boolean): org.json.JSONObject! defined in org.json.JSONObject */ fun JSONObject.putNullableBoolean(key: String, value: Boolean?) = putNullable(key, value, JSONObject::put) /* Works fine */ fun JSONObject.putNullableBoolean(key: String, value: Boolean?) = putNullable(key, value) { k, v -> put(k, v) }