猿问

如何将参数“t”替换为“className”?

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 

例如,当我输入*.ktfile:Observable.unsafeCreate{}然后按Ctrl+Spacebetween{}时,IntellijIdea 建议我输入 symbol t ->,但是当我在.java文件中执行相同操作时,结果是subscriber ->:


*.kt 文件:


fun anyFunc(): Observable<Boolean>{

    return Observable.unsafeCreate { t -> t }

}

*.java 文件:


public void anyFunc() {

    Observable.unsafeCreate(subscriber -> {});

}

如何在 Kotlin 文件中进行与 Java 文件中相同的建议输入行为?


[更新] 似乎是因为call()方法 in rx.functions.Func1,它有参数t:


public interface Func1<T, R> extends Function { 

    R call(T t); 

}


慕森王
浏览 112回答 1
1回答

开满天机

我正在使用安卓工作室 3.2.1&nbsp;,rxjava:2.2.0&nbsp;,Kotlin 插件版本 1.3.11-release-Studio3.2-1在输入*.ktfile:并在Android Studio之间Observable.unsafeCreate{}按Ctrl+Space后,我会看到下一个建议:{}当我输入*.java文件时,Android Studio 会显示相同的建议。我没有在 Android Studio Preferences 中进行任何配置更改。我猜你是从下图完成列表中的第一项导入Observable的rx。尝试Observable从io.reactivex以下完成列表中突出显示的项目导入,它可能会有所帮助:import io.reactivex.Observable.要使用它,您需要导入 rxjava2:implementation 'io.reactivex.rxjava2:rxjava:2.2.0'编辑:正如所发现的那样,代码完成对话框显示t ->是因为Action1.call(T t)调用了参数t。如果我们查看RxJava 1.3rx.Observable.unsafeCreate中方法的签名,我们可以看到它:public static <T> Observable<T> unsafeCreate(OnSubscribe<T> f) {&nbsp; &nbsp; return new Observable<T>(RxJavaHooks.onCreate(f));}OnSubscribe接口扩展Action1<Subscriber<? super T>,并Action1具有下一个签名:public interface Action1<T> extends Action {&nbsp; &nbsp; void call(T t);}因此调用了参数t,Android Studio 将其建议为t ->.在RxJava2 中,我们有不同的签名:public static <T> Observable<T> unsafeCreate(ObservableSource<T> onSubscribe) {...}public interface ObservableSource<T> {&nbsp; &nbsp; void subscribe(@NonNull Observer<? super T> observer);}我们看到 inObservableSource.subscribe()方法中的参数被调用observer了,所以我们把它看成observer->.结论:IDEA 的建议是基于您作为 lambda 实现的功能接口方法的参数名称。
随时随地看视频慕课网APP

相关分类

Java
我要回答