Kotlin类型不匹配List <Any>和List <Comparable <{com.cognitect.transit.Symbol&com.cognitect.transit.Keyword}>?>

son*_*h98 3 type-mismatch covariant kotlin

 fun serialize(aList: List<Any>)
Run Code Online (Sandbox Code Playgroud)

当我使用包含Symbol和Keyword的List调用serialize时,编译器会抱怨

类型不匹配:

Require List<Any>
Found: List<Comparable<{Symbol & Keyword}>?>
Run Code Online (Sandbox Code Playgroud)

列表不应该是协变的吗?

如何构造类型签名以匹配编译器期望的内容 List<Comparable<{Symbol & Keyword}>?>

编译器需要类型,List<Comparable<{Symbol & Keyword}>?>但这不是有效的kotlin语法

Bak*_*aii 6

你必须要serialize()接受List<Any?>,而不是因为你的Comparable类型可为空.

fun serialize(aList: List<Any?>) {}
Run Code Online (Sandbox Code Playgroud)

如果你想要它接受List<Comparable<{Symbol & Keyword}>?>,你必须使用where子句来提供多个上界:

fun <T> serialize(aList: List<Comparable<T>?>) where T: Symbol, T: Keyword {}
Run Code Online (Sandbox Code Playgroud)