+ =和添加到Kotlin中的MutableList之间的区别

时间:2018-08-05 12:06:06

标签: kotlin

在查看+=到mutableList之后,我无法立即知道它是什么,我的想象力是i = i+1,其中i是一个整数,在下面的代码,但是在调试之后,我意识到它只是将一个项目添加到列表中,所以我的问题是使用+=将项目添加到列表而不是仅使用mutableList.add(item)有什么区别,至少在我看来,这更具可读性。预先感谢。

musicSource.forEach { mediaItem ->
            val albumMediaId = mediaItem.album.urlEncoded
            val albumChildren = mediaIdToChildren[albumMediaId] ?: buildAlbumRoot(mediaItem)
            albumChildren += mediaItem
        }

3 个答案:

答案 0 :(得分:5)

没有区别。
function tmtm(){ document.getElementById("TextMobile").innerHTML = "Für weitere Informationen halten sie bitte den jeweiligen Mitarbeiter gedrückt";} 是内联运算符,在+=中,其实现为:

MutableCollections.kt

如您所见,它使用@kotlin.internal.InlineOnly public inline operator fun <T> MutableCollection<in T>.plusAssign(element: T) { this.add(element) } 方法。
您可以使用它,也可以不使用。这是你的选择。
add()更具可读性,但是我们倾向于使用x = x + 1

答案 1 :(得分:2)

这是Kotlin中的operator overloading惯例之一。

如果类型a += b实现了a.plusAssign(b)运算符函数,则编译器会将a之类的表达式转换为plusAssign。它使您能够编写更具表现力的代码。

答案 2 :(得分:1)

  1. +=对于MutableList(如果使用),编译器执行以下步骤:
  

-如果右栏中的功能可用

     
      
  • 如果相应的二进制函数(即plusAssign()的plus())为   也可用,报告错误(含糊不清),

         
        
    • 确保其返回类型为Unit,否则报告错误,

    •   
    • 为a.plusAssign(b);

    • 生成代码   
  •   
  • 否则,尝试为a = a + b生成代码(这包括类型检查:a + b的类型必须是a的子类型)。

  •   
  1. add for MutableList的功能:
  

如果已添加元素,则返回true,如果集合则返回false   不支持重复项,并且该元素已经包含在其中   集合。

注意:请不要忘记add()也可以选择在特定索引中添加元素,例如。 add(index: Int, element: E)

文档

https://kotlinlang.org/docs/reference/operator-overloading.html#assignments

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/add.html