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 = param
Robert 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 T
Robert 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