Robert Jaros
11/22/2019, 11:29 AMString or String? as a parameter and returns simple String when called with String or nullable String? when called with String??diesieben07
11/22/2019, 11:30 AMfun <T : String?> foo(param: T): T = paramRobert Jaros
11/22/2019, 11:32 AMdiesieben07
11/22/2019, 11:33 AMRobert Jaros
11/22/2019, 11:33 AMfun <T : String?> foo(str: T): T = str.toString()Robert Jaros
11/22/2019, 11:33 AMdiesieben07
11/22/2019, 11:33 AMtoString always returns String, never String?diesieben07
11/22/2019, 11:36 AMT, not just String?Robert Jaros
11/22/2019, 11:36 AMdiesieben07
11/22/2019, 11:37 AMString , which is assignable to String? anywaysRobert Jaros
11/22/2019, 11:39 AM?.let if I want to run it with nullable valuediesieben07
11/22/2019, 11:39 AMRobert Jaros
11/22/2019, 11:40 AMdiesieben07
11/22/2019, 11:40 AMRobert Jaros
11/22/2019, 11:42 AMfun <T : String?> clean(str: T): T = str?.let {
Source(it).renderer.toString()
} as TRobert Jaros
11/22/2019, 11:43 AMas T castingRobert Jaros
11/22/2019, 11:44 AMdiesieben07
11/22/2019, 11:46 AMfun clean(str: String): String = str.toString()
@JvmName("cleanNullable")
fun clean(str: String?): String? = str?.let { clean(it) }
Or, more kotlin-like, make clean an extension function and move the null-check outside:
fun String.clean() = this.toString()
// called as:
val foo: String? = TODO()
val cleaned = foo?.clean()diesieben07
11/22/2019, 11:46 AMRobert Jaros
11/22/2019, 11:49 AMRobert Jaros
11/22/2019, 11:49 AM