aballano
08/04/2017, 12:46 PMfun <T> Intent.getSerializableOrDefault(name: String, default: T) =
getSerializableExtra(name) as T ?: default
my guess is that being T a non-nullable type this should crash while trying to cast, right? But apparently in my test it works:
@Test fun `should get default`() {
val default = ASerializableClass(2)
assertThat(Intent().getSerializableOrDefault("a", default)).isEqualTo(default)
}
Slack Conversationdiesieben07
08/04/2017, 12:48 PMas T is an unchecked cast, it does not actually do any check, it says "ok I'll assume this is a T now".aballano
08/04/2017, 12:48 PMnull as String it will crashdiesieben07
08/04/2017, 12:49 PMString is a concrete type. T is a type parameter, it could be any type, it's erased.diesieben07
08/04/2017, 12:49 PMT could be String?, too.aballano
08/04/2017, 12:50 PMaballano
08/04/2017, 12:50 PMassertThat(Intent().getSerializableOrDefault<ASerializableClass>("a", default)).isEqualTo(default) that still worksdiesieben07
08/04/2017, 12:50 PMgetSerializableOrDefault the compiler does not know that.diesieben07
08/04/2017, 12:51 PMT is, so you cannot check for it.aballano
08/04/2017, 12:54 PMdiesieben07
08/04/2017, 12:55 PMgetSerializableOrDefault method looks like this:
fun Intent.getSerializableOrDefault(name: String, default: Any?)diesieben07
08/04/2017, 12:55 PMas T does nothing at runtime. There is no actual type-check performed.trevjones
08/04/2017, 12:55 PMT? so that it is more clearaballano
08/04/2017, 12:55 PMdiesieben07
08/04/2017, 12:56 PMaballano
08/04/2017, 12:56 PMas? T or as T?, but Take is still rightaballano
08/04/2017, 12:56 PMtrevjones
08/04/2017, 1:05 PM