假设我定义了以下内容:
trait T {
def foo(): Int
}
def bar(t: T): Int = {
t.foo()
}
bar(new T {
def foo() = 3
})
编译器给了我警告:
但是当我尝试
bar(new T(() => 3))
我收到错误
可以将特征转换为单个抽象方法吗?
最佳答案
你只需要这个:
bar(() => 3)
Scala 中的 SAM 类似于 Java 中的 FunctionalInterface。因此,如果您的 trait/abstract 类只有一个要定义的抽象方法,则它被视为 SAM(单一抽象方法)类型,并且可以像简单的 lambda 一样编写。
它也适用于变量赋值:
val a = () => 3 // compiler would infer () => Int for a
val b: T = () => 3 // type of b is T
关于scala - 如何将特征表达式转换为单个抽象方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56090600/