Kotlin Cheques y yesos: ‘es’ y ‘como’

En este artículo, vamos a aprender cómo aplicar cheques class un tipo de datos en particular, el reparto inteligente, operadores de conversión seguros y no seguros?

fechas Tipo: ‘es’ y ‘es!’ Operador

es operador se utiliza para comprobar si un objeto está asociado a un determinado tipo de datos o no. Esto es útil cuando no tenemos ninguna idea de que el tipo de datos que entran desde la fuente. Mediante el uso de se operador podemos confirmar el tipo de datos o de objeto y luego trabajar en consecuencia en él.

Se toma dos argumentos en la forma de: A es B

Cuando, un es el objeto y b es el tipo. Esto for cierto si un es de tipo b.

Ejemplo:

if(str is String) {
return str.length
}

Hay otro operador es que funciona como oposición a la es operador!.

if(str !is String){
print("Not a string")
}

inteligente moldes

inteligente fundido es una técnica en la que el compilador automáticamente Kotlin (seguro) emitir los objetos a su respectivo tipo mediante el seguimiento del es cheques y conversión explícita a los valores inmutables.

fun getStrLength(str: Any):Int?{
if(stris String) {
//automatically cast to string type.
return str.length
}
return null
}

inteligente fundido se puede utilizar en cuando las expresiones y mientras bucle.

fun get(x: Any):Any?{
return when(x){
is Int -> (x+10)
is Double -> (x/10)
is String ->x.length
else ->null;
}
}
print(get("ABC")) //output : 3
print(get(11)) // output : 12

inteligente fundido no funciona cuando el compilador doesn’tguaranteethat la variable no se puede cambiar entre el control y el uso. Más específicamente, los moldes inteligentes son aplicables de acuerdo con las siguientes reglas:

  1. val variables locales – siempre;
  2. val propiedades – Si la propiedad se class o internos o de la comprobación se realiza en el mismo módulo en el que se declara la propiedad. moldes inteligentes no son aplicables a abrir propiedades o propiedades que tienen captadores personalizados;
  3. var variables locales – si la variable no se modifica entre el cheque y el uso y no se captura en un lambda que lo modifica;
  4. propiedades var – Nunca (ya que la variable puede ser modificada en cualquier momento por otro código).

conversión explícita

1) Inseguro operador de conversión

Podemos utilizar como operador para convertir explícitamente una variable a un tipo de destino.

var s= str as String

Esto se llama insegura, ya que puede a través ClassCastException si colada no es posible.

var str = 123
// throws ClassCastException
var s = str as String

Si estamos tratando de fundición variables anulable a un a un tipo, entonces el tipo de destino debe ser de tipo anulable .

var str : Any ? = null
var s = str as String?
print(s) //print null

2) Segura operador de conversión

Como a veces, cuando la fundición no es posible que el compilador class ClassCastException . Para evitar la excepción, podemos utilizar operador de conversión de seguridad (como ? ), que en vez de lanzar cualquier excepción simplemente class class.

Ejemplo 1:

var str:Any?=1998
var s = str as String?
print(s)

Esto class ClassCastException.

Ejemplo 2:

var str:Any?=1998
var s= str as? String?
print(s)

Este código se ejecutará e imprimir return en lugar de lanzar una excepción.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *