Scala 如何将特征表达式转换为单个抽象方法
假设我定义如下:Scala 如何将特征表达式转换为单个抽象方法,scala,Scala,假设我定义如下: trait T { def foo(): Int } def bar(t: T): Int = { t.foo() } bar(new T { def foo() = 3 }) 编译器向我发出警告: 将表达式转换为单个抽象方法 但是当我尝试的时候 bar(new T(() => 3)) 我得到了错误 T是一个特征,因此没有构造函数 特征可以转换为单个抽象方法吗?您只需要: bar(() => 3) Scala中的SAM与Java中的
trait T {
def foo(): Int
}
def bar(t: T): Int = {
t.foo()
}
bar(new T {
def foo() = 3
})
编译器向我发出警告:
将表达式转换为单个抽象方法
但是当我尝试的时候
bar(new T(() => 3))
我得到了错误
T是一个特征,因此没有构造函数
特征可以转换为单个抽象方法吗?您只需要:
bar(() => 3)
Scala中的SAM与Java中的类似。因此,如果您的trait/abstract类只有一个要定义的抽象方法,那么它将被视为SAM(singleabstractmethod)类型,并且可以像编写简单的lambda一样编写
它也适用于可变分配:
val a = () => 3 // compiler would infer () => Int for a
val b: T = () => 3 // type of b is T