除了plus和minus是operators,因此可以分别简化为+和-,我想分享一个例子,这可能会更清楚,为什么plusElement或minusElement使用也可能有意义。基本上,当您不希望调用重载的运算符方法时(例如plus(elements : Iterable<T>))就是这种情况,当您处理列表列表时可能就是这种情况。
也许以下示例可以更清楚地说明这一点。在示例中,所有变量分配都显示了它们在调用相应函数时分配的类型,并将结果包含在行尾的注释中。变量 ~ending 命名约定如下:
-
PlusT 显示对plus(element : T) 的调用
-
PlusIterable 显示对plus(elements : Iterable<T>) 的调用
-
PlusElementT 显示呼叫plusElement(element : T)
样品:
val someEntry = "some entry"
val listOfSomeEntry = listOf(someEntry)
val los : List<String> = listOf("listOfString")
val lsPlusT : List<String> = los.plus(someEntry) // [listOfString, some entry]
val lsPlusIterable1 : List<String> = los.plus(listOfSomeEntry) // [listOfString, some entry]
val lsPlusIterable2 : List<Any> = los.plus(listOf(listOfSomeEntry)) // [listOfString, [some entry]]
val lsPlusElementT1 : List<String> = los.plusElement(someEntry) // [listOfString, some entry]
val lsPlusElementT2 : List<Any> = los.plusElement(listOfSomeEntry) // [listOfString, [some entry]]
val lol : List<List<String>> = listOf(listOf("listOfList"))
// the following is basically not really correct as we are now dealing with a list of lists of strings, but it shows that llPlusT and llPlusIterable lead to the same (in this case probably wrong) result..
val llPlusT : List<Any> = lol.plus(someEntry) // [[listOfList], some entry]
val llPlusIterable : List<Any> = lol.plus(listOfSomeEntry) // [[listOfList], some entry]
val llPlusIterable2 : List<List<String>> = lol.plus(listOf(listOfSomeEntry)) // [[listOfList], [some entry]]
val llPlusElement1 : List<Any> = lol.plusElement(someEntry) // [[listOfList], some entry]
val llPlusElement2 : List<List<String>> = lol.plusElement(listOfSomeEntry) // [[listOfList], [some entry]]
正如您在使用 + 时看到的那样,可能会使用重载变体 plus(elements : Iterable<T>),这在大多数情况下可能有意义,但在其他一些情况下可能没有意义,例如(大多数时候)在处理列表列表时。与其强制+ 使用+ listOf(anotherList) 添加列表列表,不如使用plusElement (plusElement(anotherList)),或者如果您确定只想添加一个元素,您可能想要省略 plus 以支持 plusElement (可能是一个非常罕见且非常特殊的用例......这将通过变体 llPlusElement1 反映出来)。
最后,plusElement 或 minusElement 从命名中非常清楚地表明,您传递的内容反映了列表中的一项,而 + 基本上是开放的...(但是您应该从上下文,其中带有列表的列表可能并不那么清楚;-))。最后还有一个免责声明:这不意味着您应该使用列表列表,但以防万一您发现类似的东西,您手头有 plus/minusElement ;-)