¿Qué significa un solo signo de exclamación en Kotlin? Lo he visto varias veces, especialmente cuando uso las API de Java. Pero no pude encontrarlo en la documentación ni en StackOverflow.
Se llaman tipos de plataforma y significan que Kotlin no sabe si ese valor puede o no serlo, null
y depende de usted decidir si es anulable o no.
En pocas palabras, el problema es que cualquier referencia proveniente de Java puede ser nula, y Kotlin, por su diseño nulo-seguro, obligó al usuario a verificar nulo cada valor de Java, o usar llamadas seguras (
?.
) o afirmaciones no nulas (!!
) Al ser características muy útiles en el mundo puro de Kotlin, tienden a convertirse en un desastre cuando tienes que usarlas con demasiada frecuencia en la configuración de Kotlin / Java.Es por eso que tomamos un enfoque radical e hicimos que el sistema de tipos de Kotlin fuera más relajado cuando se trata de interoperabilidad de Java: ahora las referencias provenientes de Java tienen tipos especialmente marcados - Kotlin Blog
platform types
Es la notación para los tipos de plataforma :
T!
significa "T
oT?
"fuente
T
significa "T!
oT?
"T
se hizo "no anulable", y el resto fue más o menos arbitrarioUn tipo con notación
!
se denomina tipo de plataforma , que es un tipo que proviene de Java y, por lo tanto, probablemente lo seanull
. Es lo que el compilador de Kotlin infiere por defecto cuando llama a Java (para los casos más básicos, los métodos de Java pueden ser anotados para evitar esto). Debe manejar los tipos de plataforma como tipos anulables , a menos que sepa que la API en particular nunca volveránull
. El compilador permite que se asignen tipos de plataforma a variables tanto de tipo anulable como no nulo.Puede referirse a los tipos de plataforma como "tipos de nulabilidad desconocida ". También es importante saber que no puede usar el tipo marcado con exclamación para sus propios tipos, no es parte de la sintaxis de Kotlin, es solo una notación .
fuente
Los nombres de tipo o nombres de clase que terminan con un solo signo de exclamación
!
se denominan Tipos de plataforma en Kotlin. Los encuentra cuando trabaja en Kotlin con código Java antiguo que no contiene información de nulabilidad.Por ejemplo:
Información Anulable: Tipo Anulable
@Nullable String
en Java es considerado comoString?
por Kotlin.Información no nula: tipo no nulo
@NotNull String
en Java es considerado comoString
por Kotlin.Sin información: tipo de plataforma
String
sin anotaciones en Java es considerado comoString!
por Kotlin.¿Cómo lidiar con los tipos de plataforma?
Puede trabajar con un tipo de plataforma como anulable o no nulo. El compilador le permitirá llamar a todos los métodos de este tipo. Es su responsabilidad cómo usarlos. Si sabe que el valor puede ser nulo, debe compararlo con nulo antes de llamar a los métodos. Si sabe que no es nulo, puede usarlo directamente pero, como en Java, obtendrá una excepción si su suposición acerca de la nulabilidad es incorrecta.
Tenga en cuenta que no puede declarar los tipos de plataforma en el código Kotlin, solo provienen del código Java.
Herencia y tipos de plataforma
Al anular los métodos Java en el código de Kotlin, tiene la opción de declarar los parámetros y devolver los tipos como nulos o no nulos. Debe elegir esto sabiamente, porque si decide hacer que los parámetros no sean nulos, el compilador de Kotlin genera aserciones no nulas para estos parámetros no nulos. Y cuando la próxima vez que acceda a este código de Kotlin desde Java y pase un valor nulo, obtendrá una excepción.
Espero que ayude a aclarar todas sus dudas sobre los Tipos de plataforma.
fuente
Como se menciona por s1m0nw1,
T!
significaT or T?
. La siguiente pregunta es: ¿qué esT?
? Esto está bien documentado en https://kotlinlang.org/docs/reference/null-safety.html . Kotlin no permite que ciertos elementos seannull
, por ejemploString
, a diferencia de Javafuente
Extracto de los tipos de plataforma en Kotlin :
Por ejemplo:
Solo significa lo siguiente: " La colección Java de T puede ser mutable o no, puede ser anulable o no ".
Espero que esto ayude.
fuente