kotlin - 简单 SAM 需要转换为匿名对象
问题描述
我有以下简单的界面
interface A {
fun move(s:Boolean): Int
}
我有以下课程
class X{
fun draw (x: A): String{
return "A"
}
fun main() {
val temp = A {
s -> 100
}
val a = draw ( { x -> 100} )
}
}
但是两者都temp
没有a
被宣布。temp
抱怨,建议的解决方法是按如下方式转换为匿名对象(这违背了使用 SAM 的全部目的?)
val temp = object : A {
override fun move(s: Boolean): Int {
return 100
}
}
a
抱怨类型不匹配。我的问题是为什么这个简单的 SAM 会失败?方法签名是相同的。
解决方案
目前 Kotlin 仅对 Java 中定义的接口进行 SAM 转换。
对于纯 Kotlin 代码,您应该使用如下函数类型:
typealias A = (s: Boolean) -> Int
但是,您期望的语法将在 Kotlin 1.4 中得到支持,接口定义为fun interface
.
如此处宣布的:
Kotlin 1.4 及更高版本中的预期内容
并跟踪为KT-7770
推荐阅读
- aws-lambda - 使用 AWS Api Gateway 时返回错误错误
- asp.net-core - 用户定义结构的属性未在 .NET Core 3.0 Web API 中反序列化(适用于 .NET Core 2.2)
- coldfusion - 语法奇怪的内存不足增量运算符
- javascript - 将 Javascript 数组转换为 JSON 对象
- amazon-web-services - 使用 Systems Manager 在 Windows EC2 实例上运行 AWS CLI 命令
- c# - 为什么自定义运行设置文件上的代码覆盖率返回排除的路径
- python - 将 Python timedelta 对象映射到数值区间
- sql - 即使在 group by 中不存在,如何检索数据?
- android - Kotlin - 从原始资源共享音频文件
- algorithm - 使用线段树在一个范围内小于 k 的所有数字的总和