Kotlin: использование ссылки на метод для получателя другого класса - PullRequest
0 голосов
/ 24 марта 2020

У меня есть класс -

class ES {
    var issue: SomeClass? = null
}

Мне нужен доступ к его получателю в другом классе -

class CSS {
   private val ref: Supplier<SomeClass?> = ES::issue
}

Однако это не работает. Выдает эту ошибку -

Type mismatch.
Required: Supplier<SomeClass?>
Found   : KMutableProperty1<ES, SomeClass?>

Может кто-нибудь сказать мне, что я делаю не так? Я на самом деле в процессе преобразования java кода в kotlin.

ОБНОВЛЕНИЕ

Мне нужна ссылка c stati на получатель ES класс, похожий на JAVA, где мы можем сделать ->

Function<ES, SomeClass> ref = ES::getIssue;

1 Ответ

1 голос
/ 24 марта 2020

В Kotlin вместо поставщика вы используете функциональный синтаксис для типа. В этом случае эквивалент вашего Supplier<SomeClass?> будет () -> SomeClass? (при условии, что ES равен object, поскольку именно так вы и использовали его в своем примере кода):

class CSS(/*...*/) {
   private val ref: () -> SomeClass? = ES::issue
}

Но если вам нужно Используйте поставщика специально, чтобы его можно было легко использовать с кодом Java, вы можете заключить ссылку на получатель в реализацию поставщика:

class CSS(/*...*/) {
   private val ref: Supplier<SomeClass?> = Supplier(ES::issue)
}

Обновить Если вы хотите получить получателя без указания c экземпляр класса, аналогично Function<ES, SomeClass> в Java, тогда вам нужно сделать ES параметром функции.

Либо

private val ref: (ES) -> SomeClass? = ES::issue

, либо

private val ref: ES.() -> SomeClass? = ES::issue

Я не верю, что есть способ сделать это с Поставщиком, но я не думаю, что вы могли бы сделать это также в Java с Поставщиком.

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