Cómo comprobar si una lista contiene nulo en Kotlin?

Karl Richter:

Estoy teniendo problemas para entender por qué

class Main {
    private val outputStreams: List<OutputStream>

    @JvmOverloads constructor(outputStreams: List<OutputStream> = LinkedList()) {
        if(outputStreams.contains(null)) {
            throw IllegalArgumentException("outputStreams mustn't contain null")
        }
        this.outputStreams = outputStreams
    }
}

hace que el error de compilación ...Main.kt:[12,26] Type inference failed. The value of the type parameter T should be mentioned in input types (argument types, receiver type or expected type). Try to specify it explicitly..

Si utilizo outputStreams.contains(null as OutputStream))la compilación tiene éxito, pero Main(LinkedList<OutputStream>())falla en tiempo de ejecución debido a las

kotlin.TypeCastException: null cannot be cast to non-null type java.io.OutputStream
    at kotlinn.collection.contains.nulll.check.Main.<init>(Main.kt:12)
    at kotlinn.collection.contains.nulll.check.MainTest.testInit(MainTest.kt:13)

Lo que me deja con ningún otro método para mantener el código lo más cerca posible de Java original como sea posible, que es mi intención, así como la comprensión de este tema, ya que es en lugar de buscar una solución.

s1m0nw1:

Para el compilador, el parámetro outputStreamsno puede contener nullcomo su tipo está List<OutputStream>en oposición a List<OutputStream?>. El sistema de tipos no espera nullestar dentro de esta lista, por lo tanto no hay necesidad de comprobarlo.

Por otro lado , SI ese parámetro en realidad podría contener null(ya que proviene de una persona que llama Java) que debe marcarlo como explícitamente anulable:List<OutputStream?>

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=197423&siteId=1
Recomendado
Clasificación