如何将param"t"替换为"className"?

Nic*_*hek 14 java intellij-idea kotlin android-studio android-studio-3.0

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 
Run Code Online (Sandbox Code Playgroud)

例如,当我输入*.kt文件:Observable.unsafeCreate{}然后按两次Ctrl+Space之间{},然后IntellijIdea建议我键入符号t ->,但是当我在.java文件中执行相同的操作时结果是subscriber ->:

*.kt 文件:

fun anyFunc(): Observable<Boolean>{
    return Observable.unsafeCreate { t -> t }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

*.java 文件:

public void anyFunc() {
    Observable.unsafeCreate(subscriber -> {});
}
Run Code Online (Sandbox Code Playgroud)

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


[UPDATE] 似乎是因为call()方法rx.functions.Func1,它有param t:

public interface Func1<T, R> extends Function { 
    R call(T t); 
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*gey 5

我正在使用

Android Studio 3.2.1,

rxjava:2.2.0,

Kotlin插件版本1.3.11-release-Studio3.2-1

输入*.kt文件后:在Android Studio 之间Observable.unsafeCreate{}Ctrl + Space{}显示下一个建议:

在此输入图像描述

当我在*.java文件中输入时,Android Studio会显示相同的建议.

我没有在Android Studio偏好设置中进行任何配置更改.

我想你是Observablerx以下图片中的完成列表中的第一个项目导入的.尝试Observableio.reactivex下面的完成列表中的 - 突出显示的项目导入,它可能会有所帮助:import io.reactivex.Observable.

在此输入图像描述

要使用它,您需要导入rxjava2:

implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
Run Code Online (Sandbox Code Playgroud)

编辑:

正如计算出的代码完成对话框所示,t ->因为Action1.call(T t)调用了参数t.如果我们查看RxJava 1.3rx.Observable.unsafeCreate方法的签名,我们可以看到它:

public static <T> Observable<T> unsafeCreate(OnSubscribe<T> f) {
    return new Observable<T>(RxJavaHooks.onCreate(f));
}
Run Code Online (Sandbox Code Playgroud)

OnSubscribe接口扩展Action1<Subscriber<? super T>,并Action1具有下一个签名:

public interface Action1<T> extends Action {
    void call(T t);
}
Run Code Online (Sandbox Code Playgroud)

因此调用参数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);
}
Run Code Online (Sandbox Code Playgroud)

我们看到在ObservableSource.subscribe()方法参数中被调用observer,所以我们将其视为observer->.

结论:IDEA的建议基于您实现为lambda的Functional接口方法的参数名称.