首先检查Kotlin插件版本
当前版本已是最新
打开需要转换的java文件,点击Convert Java File to Kotlin File
转换完成,但还有一些问题需要手动修改
转换前Java代码
Observable observableKey = Observable.just(szKey);//szKey:String
Observable observableValue = Observable.just(szValue);//szValue:String
Observable observableCallBack = Observable.just(l);//l: OpDBListener
Observable.zip(observableKey, observableValue, observableCallBack, new Function3<String,String,OpDBListener,OpDBResult>() {
@Override
public OpDBResult apply(String thekey, String theValue, OpDBListener theListner) throws Exception {
//dosomething
return new OpDBResult(theListner,0,"操作成功");
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<OpDBResult>() {
@Override
public void accept(OpDBResult reuslt) throws Exception {
if(reuslt!=null)
reuslt.onCallBack();
}
});
自动转换后Kotlin代码
val observableKey: Observable<*> = Observable.just(szKey)
val observableValue: Observable<*> = Observable.just(szValue)
val observableCallBack: Observable<*> = Observable.just(l)
Observable.zip(observableKey, observableValue, observableCallBack, object : Function3<String?, String?, OpDBListener?, OpDBResult?> {
@Throws(Exception::class)
override fun apply(thekey: String, theValue: String, theListner: OpDBListener): OpDBResult {
//dosomething
return OpDBResult(theListner, 0, "操作成功")
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Consumer<OpDBResult?> {
@Throws(Exception::class)
override fun accept(reuslt: OpDBResult) {
reuslt?.onCallBack()
}
})
由于使用了RxJava的zip命令,转换后出现了多个报错
问题一 kotlin中需明确数据类型,正确示例
val observableKey: Observable<String> = Observable.just(szKey)
val observableValue: Observable<String> = Observable.just(szValue)
val observableCallBack: Observable<OpDBListener> = Observable.just(l)
问题二and问题三 入参类型声明需要和接口中的抽象方法一致,不可为空,正确示例
object : Function3<String, String, OpDBListener, OpDBResult?>
手动修改后代码
val observableKey: Observable<String> = Observable.just(szKey)
val observableValue: Observable<String> = Observable.just(szValue)
val observableCallBack: Observable<TdxOpDBListener> = Observable.just(l)
Observable.zip(observableKey, observableValue, observableCallBack, object : Function3<String, String, OpDBListener, OpDBResult?> {
@Throws(Exception::class)
override fun apply(thekey: String, theValue: String, theListner: OpDBListener): OpDBResult {
//dosomething
return OpDBResult(theListner, 0, "操作成功")
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Consumer<OpDBResult?> {
@Throws(Exception::class)
override fun accept(reuslt: OpDBResult?) {
reuslt?.onCallBack()
}
})