Передача метода вместо передачи интерфейса в Kotlin - PullRequest
2 голосов
/ 12 января 2020

Когда я использую Java, легко использовать интерфейс для отправки метода в другой класс. И это хорошо OOP способом:

class A{
   private FooListener listener;

   public A(FooListener listener){
        this.listener = listener;
   }

   public void foo(){
        // do something
        listener.method();
   }
}

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

class A(val method: () -> Unit ) {
    fun foo(){ 
        // do something
        method()
    }
}

, если код все еще хорош OOP образом? или я должен использовать интерфейс? я думаю, что можно передать метод напрямую.

Ответы [ 2 ]

2 голосов
/ 12 января 2020

В Kotlin оба эти метода являются правильными и могут использоваться в зависимости от вашего варианта использования. В отличие от Java, который был в основном объектно-ориентированным языком, но позже включал некоторые функциональные функции программирования с введением java 8, Kotlin с самого начала предназначен для поддержки обоих объектно-ориентированный , а также функциональный подход.

при Kotlin в действии состояния

Kotlin позволяет программировать в функциональном стиле, но не применяет его.

Когда вам это нужно, вы можете работать с изменчивыми данными и писать функции, которые имеют побочные эффекты, не перепрыгивая через дополнительные обручи. И, конечно же, работать со средами, основанными на интерфейсах и иерархиях классов, так же просто, как с Java.

При написании кода в Kotlin вы можете комбинировать как объектно-ориентированный, так и функциональный подходы и использовать инструменты, наиболее подходящие для решаемой вами проблемы.

1 голос
/ 12 января 2020

Код в порядке. Лучше написать более читаемый код, чем код «это должно быть OOP».

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