Как расширение к ответу на katspaugh, вот способ сделать это для нескольких элементов, используя класс css.
$('.myclass').each(function(){
$(this).attr('oldval',$(this).val());
});
$('.myclass').on('change keypress paste focus textInput input',function(){
var val = $(this).val();
if(val != $(this).attr('oldval') ){
$(this).attr('oldval',val);
checkLength($(this).val());
}
});
На самом деле Intellij помогает вам на стороне Java, но не (пока) на стороне Kotlin.
subscriber
-параметр-имя происходит от универсального типа расширенного интерфейса, то есть Subscriber
из interface OnSubscribe<T> extends Action1<Subscriber<? super T>>
.
Однако на стороне Kotlin этот механизм не применяется, и поэтому завершение кода предлагает вместо этого параметр реализующей функции, который в данном случае взят из Action1#call(T t)
, то есть просто t
.
Вы можете проверить, что он использует информацию общего типа, просто сделав базовый пример:
class CustomObject {}
interface MyCustomConsumer extends Consumer<CustomObject> { }
static void test(MyCustomConsumer mcs) { }
public static void main(String[] args) {
test( // <- place cursor here and start code completion and you should get "customObject"
Обратите внимание, что для некоторых типов он адаптирует именование, например, String
становится s
, а другим коробочным типам (Long
, Integer
и т. Д.) Предшествует a
(например, aLong
; конечно, в противном случае вы бы использовали зарезервированное слово). [ 1121]
Если вам интересно, что там происходит в исходном коде, вы можете попробовать исходный код сообщества Intellij или для Android Studio вы можете захотеть пройти Сборка Android Studio первый. [одна тысяча сто двадцать-дв]
РЕДАКТИРОВАТЬ: я должен был бы добавить код плагина Kotlin вместо ;-), если вы хотите улучшить предложения по завершению для Kotlin, вы можете взглянуть на JetBrains / kotlin / idea / idea-complete , Кроме того, JetBrains / kotlin / idea / src также стоит посмотреть, и вы, вероятно, в конечном итоге посмотрите на все JetBrains / kotlin / idea-packages ; -)
Я использую
Android Studio 3.2.1 ,
rxjava: 2.2.0 ,
[ 1132] Плагин Kotlin версии 1.3.11-release-Studio3.2-1blockquote>
После ввода в файле
*.kt
:Observable.unsafeCreate{}
и нажатия Ctrl + Пробел между{}
Android Studio показывает мне следующее предложение:То же самое предложение Android Studio показывает, когда я печатаю в файле
*.java
.В настройках Android Studio я не вносил никаких изменений в конфигурацию.
Я полагаю, вы импортируете
Observable
изrx
- первый элемент в списке завершения на изображении ниже. Попробуйте импортироватьObservable
изio.reactivex
- выделенный элемент в списке завершения ниже, это может помочь:import io.reactivex.Observable
.Для его использования необходимо импортировать rxjava2:
implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
РЕДАКТИРОВАТЬ :
Как было выяснено, диалог завершения кода показывал
t ->
, потому что параметр вAction1.call(T t)
называетсяt
. Это можно увидеть, если мы посмотрим на сигнатуру методаrx.Observable.unsafeCreate
в RxJava 1.3 : интерфейсpublic static <T> Observable<T> unsafeCreate(OnSubscribe<T> f) { return new Observable<T>(RxJavaHooks.onCreate(f)); }
OnSubscribe
расширяетAction1<Subscriber<? super T>
, аAction1
имеет следующую сигнатуру :public interface Action1<T> extends Action { void call(T t); }
Таким образом, параметр называется
t
, и Android Studio предлагает его какt ->
.В RxJava2 мы имеем другую подпись:
public static <T> Observable<T> unsafeCreate(ObservableSource<T> onSubscribe) {...} public interface ObservableSource<T> { void subscribe(@NonNull Observer<? super T> observer); }
Мы видим, что в
ObservableSource.subscribe()
параметр метода называетсяobserver
, поэтому мы видим его какobserver->
. [ 1145]Заключение : предложение IDEA основано на имени параметра метода функционального интерфейса, который вы реализуете как лямбда-выражение.