Как заменить параметр & ldquo; t & rdquo; to & ldquo; className & rdquo ;?

Как расширение к ответу на 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());
        }
    });
14
задан user5377037 21 January 2019 в 12:55
поделиться

2 ответа

На самом деле 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 ; -)

0
ответ дан Roland 21 January 2019 в 12:55
поделиться

Я использую

Android Studio 3.2.1 ,

rxjava: 2.2.0 ,

[ 1132] Плагин Kotlin версии 1.3.11-release-Studio3.2-1

После ввода в файле *.kt: Observable.unsafeCreate{} и нажатия Ctrl + Пробел между {} Android Studio показывает мне следующее предложение:

enter image description here

То же самое предложение Android Studio показывает, когда я печатаю в файле *.java.

В настройках Android Studio я не вносил никаких изменений в конфигурацию.

Я полагаю, вы импортируете Observable из rx - первый элемент в списке завершения на изображении ниже. Попробуйте импортировать Observable из io.reactivex - выделенный элемент в списке завершения ниже, это может помочь: import io.reactivex.Observable.

enter image description here

Для его использования необходимо импортировать 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 основано на имени параметра метода функционального интерфейса, который вы реализуете как лямбда-выражение.

0
ответ дан Sergey 21 January 2019 в 12:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: