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

Я хочу установить фильтр для редактирования текста.

view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(object : InputFilter {
        override fun filter(source: CharSequence?,
                            start: Int,
                            end: Int,
                            dest: Spanned?,
                            dstart: Int,
                            dend: Int): CharSequence {
            // TODO: Do something
            return "";
        }
    })

В любом случае, Android Studio показывает следующее предупреждение / предложение для объекта: InputFilter.

Convert to Lambda
This inspection reports an anonymous object literal implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression.

Я знаю, как использовать лямбда-выражения, например, для установки прослушивателей щелчков, но как мне обеспечить массив из одного элемента с реализацией интерфейса с лямбда-выражением?

1 Ответ

0 голосов
/ 06 октября 2018

Объекты с одним методом на самом деле не должны явно объявлять имена методов, потому что есть только один.Как правило, если у вас есть интерфейс с одним методом, вы можете преобразовать, например, это:

object : SomeInterface {
    override fun someMethod(){
        TODO("Something");
    }
}

в более простое:

SomeInterface { 
    TODO("Something");
}

Если есть аргументы, вы добавляете такие как:

SomeInterface { x, y, z ->

}

Однако, из-за ошибки это невозможно для интерфейсов, определенных в Kotlin.Если вы попробуете это для интерфейса в Kotlin, он не скомпилируется.

Ваш интерфейс определен в Java, что означает, что вы можете:

view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(InputFilter { source, start, end, dest, dstart, dend ->
    // TODO: Do something
    "";
})

Кроме того, всякий раз, когда вы получаете какие-либо предложения в IntelliJ или Android Studio, Alt + Ввод с сочетаниями клавиш по умолчанию показывает предложения для решений.

enter image description here

При нажатии на клавишу ввода он автоматически преобразуется, и если вы нажметестрелка вправо, вы получите больше вариантов (в том числе исправление всех связанных проблем в файле, подавление его).Это также относится к ошибкам (хотя не все имеют автоматическое исправление), предупреждениям и другим предложениям.

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