Метод filterNotNull () может отфильтровать все нулевые объекты из коллекции, чтобы вы могли использовать приведенный ниже код.Очевидно, что вам нужно сообщить компилятору, что объекты в коллекции могут быть обнуляемыми.Я изменил тип OutputStream на String для более простого тестирования.
class Main{
private val outputStreams: List<String?>
@JvmOverloads constructor(outputStreams: List<String?> = LinkedList()) {
if(outputStreams.filterNotNull().size < outputStreams.size) {
throw IllegalArgumentException("outputStreams mustn't contain null")
}
this.outputStreams = outputStreams
}
fun getOutputStream(): List<String?>{
return outputStreams
}
}
Второй подход заключается в использовании let T.let (block: (T) -> R): R, где вы принимаете обнуляемый объект, но тогда вам придется проверить, есть ли какая-либо «нулевая» строка, и реагировать соответствующим образом.
class Main{
lateinit var outputStreams: List<String?>
@JvmOverloads constructor(outputStreams: List<String?> = LinkedList()) {
outputStreams.let {
this.outputStreams = outputStreams
}
}
fun getOutputStream(): List<String?>{
return outputStreams
}
}
fun main(args: Array<String>) {
val outputStreamWithNull: List<String?> = listOf("alpha", "beta", null, "omega")
val mainA = Main(outputStreamWithNull)
mainA.getOutputStream().forEach {
println(it)
}
}
Если вы «уверены», что параметр объекта в конструкторе должен быть коллекцией ненулевыхобъекты, то вы можете удалить?Однако проверка на обнуляемость в коллекции List должна выполняться объектом, инициализирующим класс Main, так что в основном вы перекладываете ответственность за перехват NullPointerException на кого-то другого.