Как применить преобразование sam к моей реализации анонимного класса и преобразовать его в лямбду - PullRequest
0 голосов
/ 28 октября 2019

В 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()

}

Но могу ли я применить преобразование SAM (Single abstract method) в реализации kotlin ипреобразовать в лямду?

1 Ответ

1 голос
/ 28 октября 2019

Нет, вы не можете использовать преобразование SAM для интерфейсов Kotlin, только для интерфейсов Java. На это прямо указывают официальные документы о преобразованиях SAM (выделено мной):

[преобразование SAM] работает только для взаимодействия Java ;поскольку у Kotlin есть надлежащие типы функций, автоматическое преобразование функций в реализации интерфейсов Kotlin не требуется и, следовательно, не поддерживается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...