Как заменить пары «т» на «Classname»?

Вопрос задан: 1 год назад Последняя активность: 1 год назад
up 14 down
Android Studio 3.2.1
Kotlin plugin version 1.3.11-release-Studio3.2-1
ext.kotlin_version = '1.3.11' 
RxJava 1.3.0 

Например, когда я печатаю *.kt файл: Observable.unsafeCreate{} а затем нажмите Ctrl+Space между {} , То IntellijIdea предложить мне набрать символ t ->, Но когда я делаю то же самое в .java результат файла subscriber -> :

*.kt файл:

fun anyFunc(): Observable<Boolean>{
    return Observable.unsafeCreate { t -> t }
}

Как заменить пары «т» на «Classname»?

*.java файл:

public void anyFunc() {
    Observable.unsafeCreate(subscriber -> {});
}

Как сделать в Котлин подать такое же поведение внушения печатать как в Java файл?


[ОБНОВИТЬ] Кажется, это из-за call() способ rx.functions.Func1, она имеет параметры t:

public interface Func1<T, R> extends Function { 
    R call(T t); 
}

2 ответа

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Реклама

up 5 down

я использую

Android Studio 3.2.1,

rxjava: 2.2.0,

Котлин плагин версии 1.3.11-релиз-Studio3.2-1

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

Как заменить пары «т» на «Classname»?

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

Я не делал никаких изменений в конфигурации в Android Studio Preferences.

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

Как заменить пары «т» на «Classname»?

Для этого вам необходимо импортировать 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 Студия предлагает как 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->.

Заключение: Предложение IDEA основывается на имени параметра метода функционального интерфейса вы реализуете в лямбда.

up 4 down

На самом деле Intellij помогает на стороне Java, но (пока) не на стороне Котлин.

subscriber-параметрических-название происходит от универсального типа расширенного интерфейса, т.е. Subscriber из interface OnSubscribe<T> extends Action1<Subscriber<? super T>>.

На стороне котлинского Однако этот механизм не применяется, и поэтому код завершения указывает вам параметр функции, реализующей вместо того, что в данном случае составляет от 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; Конечно, в противном случае вы должны использовать зарезервированное слово).

Если вам интересно, что происходит в исходном коде нет, вы можете пройти Intellij источник сообщества код или для Android Studio вы можете пройти Строительство Android-студия первый.

EDIT: я должен был добавить код плагина Котлин вместо ;-) если вы хотите улучшить предложения по заполнению Котлин вы можете посмотреть на JetBrains/Котлин/идея/идея-завершение. К тому же JetBrains/Котлин/идея/SRC также может быть стоит посмотреть, и вы, вероятно, в конечном итоге, глядя на все из JetBrains/Котлин/идея-пакеты ;-)

Ошибка 505

Что-то пошло не так

Попробуйте воспользоваться поиском