在你的代码中,
aa
和
bb
两者都是类型
MDetail?
但是
null
值本身不包含有关类型的信息,因此编译器无法为您推断类型,这是一个编译错误,但是如果您将
无效的
到
M细节?
,然后它也将被编译:
listofMDetail.remove(null as MDetail?)
那么问题是,为什么
remove
当您的
listofMDetail
声明为
MutableList<MDetail>
没有
?
之后
MDetail
.
那是因为
去除
方法未解析为
public interface MutableList<E>
但是
MutableCollections.kt
的
去除
,代码如下:
package kotlin.collections
/**
* Removes a single instance of the specified element from this
* collection, if it is present.
*
* Allows to overcome type-safety restriction of `remove` that requires to pass an element of type `E`.
*
* @return `true` if the element has been successfully removed; `false` if it was not present in the collection.
*/
@kotlin.internal.InlineOnly
public inline fun <@kotlin.internal.OnlyInputTypes T> MutableCollection<out T>.remove(element: T): Boolean
= @Suppress("UNCHECKED_CAST") (this as MutableCollection<T>).remove(element)
在您的例子中,泛型类型t是
M细节?
和
美迪泰
是
out T
,所以
去除
将接收类型为的参数
M细节?
,允许
无效的
价值。