Articles of kotlin null safety

kotlin reflexión verificación nullable types

¿Cómo puedo probar si una variable KType tiene el valor de un tipo de null Kotlin, (eG Int?)? yo tengo var type: KType variable procedente de una KProperty<*>.returnType y necesito detectar si es igual a ciertos types de kotlin (Int, Long, etc.). Esto funciona con: when (type) { Int::class.defaultType -> … Long::class.defaultType -> … else […]

¿Se puede convertir un campo en una versión no nula de sí mismo?

Tengo una class de datos data class MyModel(private val _data: MyData? = null) Y quiero asegurarme de que mis datos solo sean accesibles cuando no sean nulos, sino throw. Yo uso el de abajo, que es bueno. fun getData(): MyData { return checkNotNull(_data) { "data shouldn't be null" } } Sin embargo, si sigo la […]

¿Cómo puedo crear una instancia de un object usando valores de parameters de constructor pnetworkingeterminados en Kotlin?

Tengo una class de datos con valores pnetworkingeterminados. data class Project( val code: String, val name: String, val categories: List<String> = emptyList()) La reflexión de Java no crea una instancia de la class cuando algunos valores son nulos. Estoy recibiendo una exception java.lang.IllegalArgumentException: Parameter specified as non-null is null: method Project.<init>, parameter categories Esto se […]

Kotlin security nula?

Tengamos una function foo y una class Bar : fun foo(key: String): String? { // returns string or null } class Bar(x: String, y: String) { // … } Ahora, tengamos el código: val x = foo("x") val y = foo("y") if (x.isNotEmpty() && y.isNotEmpty()) return Bar(x, y) El problema es que este código no […]

¿Hay alguna manera de crear una matriz no nula a partir de un range?

En Java, se puede crear una matriz simple utilizando un bucle for tradicional: ImageButton[] buttons = new ImageButton[count]; for (int i = 0; i < count; i++) { buttons[i] = view.findViewById(BUTTON_IDS[i]); } Una simple conversión a Kotlin produce lo siguiente: val buttons = arrayOfNulls<ImageButton>(count) for (i in 0..count) { buttons[i] = view.findViewById<ImageButton>(BUTTON_IDS[i]) } El problema […]

¿Kotlin no se puede anular valor puede ser nulo?

Tengo backend que me devuelve algo json. Lo analizo en mi class: class SomeData( @SerializedName("user_name") val name: String, @SerializedName("user_city") val city: String, var notNullableValue: String) Use la fábrica de convertidores gson: Retrofit retrofit = new Retrofit.Builder() .baseUrl(ENDPOINT) .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create(gson)) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); Y en mi interfaz: interface MyAPI { @GET("get_data") Observable<List<SomeData>> getSomeData(); } Luego recupero datos […]

Kotlin null-safety para properties de class

¿Cómo puedo evitar usarlo !! para properties opcionales de class class PostDetailsActivity { private var post: Post? = null fun test() { if (post != null) { postDetailsTitle.text = post.title // Error I have to still force using post!!.title postDetailsTitle.author = post.author Glide.with(this).load(post.featunetworkingImage).into(postDetailsImage) } else { postDetailsTitle.text = "No title" postDetailsTitle.author = "Unknown author" Toast.makeText(this, […]

Kotlin con si no es nulo

¿Cuál sería la forma más concisa de usar with iff a var no es null ? Lo mejor que pude llegar es: arg?.let { with(it) { }}

Conversor de Java a Kotlin y arguments de método nulable

Tuve un caso en el que el convertidor de Java a Kotlin me falló miserablemente al no marcar los arguments del método como anulables. Ejemplo: seguimiento del ciclo de vida de la actividad usando registerActivityLifecycleCallbacks : registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {} @Override public void onActivityStarted(Activity activity) {} @Override public […]

Asignación variable de nula Kotlin

En Kotlin, ¿hay alguna syntax más corta para este código? if(swipeView == null){ swipeView = view.find<MeasureTypePieChart>(R.id.swipeableView) } Primero intenté esto: swipeView ?: view.find<MeasureTypePieChart>(R.id.swipeableView) pero luego me di count de que no era una tarea, así que ese código no hace nada. Entonces probé: swipeView = swipeView ?: view.find<MeasureTypePieChart>(R.id.swipeableView) Lo cual funciona, pero es un poco […]