如何将sam转换应用于我的匿名类实现并将其转换为lambda

时间:2019-10-27 22:29:12

标签: android kotlin

在Java中,我可以使用匿名类来实现如下所示的接口:

接口:

interface Human
{
    void think();
}

实施:

public class  Runner
{
    public static void main(String[] args) 
    {
        Human programmer = new Human()
            { public void think()
                {
                    System.out.println("Hello World!");
                }

            };

            programmer.think()

    }
}

如果我将其转换为kotlin,则它将变为:

接口:

interface Human
{
    fun think()
}

实施:

fun main(args: Array<String>)
{
    var programmer : Human = object : Human
                        {
                            override fun think()
                            {
                                System.out.println("Hello World!")  
                            }

                        }

        programmer.think()

}

但是我可以在kotlin实现中应用SAM(单一抽象方法)转换并转换为lamda吗?

1 个答案:

答案 0 :(得分:1)

否,您不能将SAM转换用于Kotlin接口,只能用于Java接口。 official docs on SAM conversions(强调我)明确指出了这一点:

  

[SAM转换]仅适用于Java互操作;由于Kotlin具有适当的功能类型,因此不需要将功能自动转换为Kotlin接口的实现,因此不受支持。