【问题标题】:.add Method of MutableList<E> throws kotlin.KotlinNullPointerExceptionMutableList<E> 的 .add 方法抛出 kotlin.KotlinNullPointerException
【发布时间】:2017-10-15 18:31:59
【问题描述】:

请记住,我正在加强函数式编程,呵呵。

我已经定义了一个这样的可变列表:

 var list: MutableList<E>? = null

所以,当我尝试使用 list!!.add(E()) 时,会抛出一个

kotlin.KotlinNullPointerException.

我知道这是因为我在定义它时将 null 分配给该列表,但是没有得到正确的解决方案来思考函数式编程方面如何解决这个问题。 你能建议我一些代码或概念来实现这种情况吗?

【问题讨论】:

  • 您是在问如何存储null 以外的内容吗?如何在不使用!! 的情况下访问可为空的对象?这两个都包含在语言文档中。
  • 我想在列表中存储一个新项目,但是当我尝试使用我在 java 中存储项目的方法 .add 时会引发异常。
  • 但是你一开始没有列表,你有null。 Java 的主要变化只是 Kotlin 为您提供了不可为空引用的选项,并且将其设为默认值。你必须选择null,并且未经检查的访问不会编译(你用!!告诉编译器你保证它不是null,这是一个谎言),所以意外拥有一个相当困难的NullPointerException.
  • 是的,就是这样,我能做些什么来解决这类问题。在可能的情况下,我不知道这个列表会很长,所以我可以设置一个固定大小。简而言之,我可以在之前初始化它,或者不知道该怎么做。
  • 一开始你可能甚至不需要它可以为空,但不管怎样,create an object 而不是使用null,就像在 Java 中一样。

标签: kotlin nullable


【解决方案1】:

在调用任何方法之前,您需要使用 MutableList 的实例初始化变量。

list = mutableListOf<E>() // creates an empty mutable list
list!!.add(E())

如果你在声明的时候初始化变量,你甚至不需要将它声明为可空和var。

val list = mutableListOf<E>()
...
list.add(E())

【讨论】:

  • 非常感谢,这很完美。我不知道有这样的方法来初始化对象。
  • 你应该以某种方式获得你的类的一个实例,例如通过调用它的构造函数:val person = Person(name, age)
  • 我明白了,谢谢你的帮助。我正在加入函数式编程中包含的这些很棒的概念。
  • 其实这和函数式编程一点关系都没有,更像是面向对象编程。
【解决方案2】:

这是正确的声明列表。

private var mList = mutableListOf<String>()//You can change the String class to your data model

您可以像这样添加值:

mList.add(String)//you can assign your data model class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 2016-02-24
    • 1970-01-01
    • 2012-07-03
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多