I read the Kotlin lang docs and it addresses both of these cases:
Unsafe cast:
val x: String = y as String
Safe cast:
val x: String? = y as? String
but Kotlin seems to allow this as well (note the right most ?
:
val x: String? = y as? String?
Is the furthest most ?
redundant in this case?
CodePudding user response:
Simply put yes. The reason being that as?
is a nullable cast operator, meaning that if in your example y
is null then the cast is not even tried (effectively, as you wrote, performing a safe cast). Only when y
is not null, the cast is performed and therefore having String
or String?
has exactly the same effect, actually making ?
redundant in this case.
CodePudding user response:
Agreed with João Dias answer, the ?
in String?
is redundant, you can check also the code behind by decompile the kotlin bytecode. Both as? String
and as? String?
produce the same compiled code as follows
String var10001 = this.y;
if (!(var10001 instanceof String)) {
var10001 = null;
}
this.x = var10001;