【问题标题】:Need help to convert Kotlin to Java需要帮助将 Kotlin 转换为 Java
【发布时间】:2019-12-23 19:20:32
【问题描述】:

我对 Kotlin 的了解为零,我知道 Kotlin 可能是未来,但我有项目需要用 Java 完成,我看过这篇不错的帖子:here 但它是在 Kotlin 中完成的,并且我很难将其更改为 Java,尤其是 (T.() -> Unit)? 语法...

那么,任何人都可以帮助我将下面的 2 转换为 Java 吗?

class LiveMessageEvent<T> : SingleLiveEvent<(T.() -> Unit)?>() {
    fun setEventReceiver(owner: LifecycleOwner, receiver: T) {
        observe(owner, Observer { event ->
            if ( event != null ) {
                receiver.event()
            }
        })
    }

    fun sendEvent(event: (T.() -> Unit)?) {
        value = event
    }
}

还有这段代码:

const val GOOGLE_SIGN_IN : Int = 9001

class LoginViewModel @Inject constructor(
    private val loginRepository: LoginRepository,
    private val googleSignInClient: GoogleSignInClient
): ViewModel() {

    val startActivityForResultEvent = LiveMessageEvent<ActivityNavigation>()
    ..

    //Called on google login button click
    fun googleSignUp() {
        val signInIntent = googleSignInClient.signInIntent
        startActivityForResultEvent.sendEvent { 
startActivityForResult(signInIntent, GOOGLE_SIGN_IN) }
    }

//Called from Activity receving result
fun onResultFromActivity(requestCode: Int, resultCode: Int, data: Intent?) {
    when(requestCode) {
        GOOGLE_SIGN_IN -> {
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            googleSignInComplete(task)
        }
        ..
    }
}

private fun googleSignInComplete(completedTask: Task<GoogleSignInAccount>) {
    try {
        val account = completedTask.getResult(ApiException::class.java)
        account?.apply {
            // .. Store user details
            emitUiState(
                showSuccess = Event(R.string.login_successful)
            )
        }
    }catch (e: ApiException) {
        emitUiState(
            showError = Event(R.string.login_failed)
        )
    }
}

感谢您的帮助...

编辑:

我确实尝试从 Android Studio 反编译,这是我得到的:

public final class LiveMessageEvent extends SingleLiveEvent {
   public final void setEventReceiver(@NotNull LifecycleOwner owner, final Object receiver) {
      Intrinsics.checkParameterIsNotNull(owner, "owner");
      this.observe(owner, (Observer)(new Observer() {
         // $FF: synthetic method
         // $FF: bridge method
         public void onChanged(Object var1) {
            this.onChanged((Function1)var1);
         }

         public final void onChanged(@Nullable Function1 event) {
            if (event != null) {
               event.invoke(receiver);
            }

         }
      }));
   }

   public final void sendEvent(@Nullable Function1 event) {
      this.setValue(event);
   }
}

从上面的结果中我不太确定Intrinsicsfunction1invokeobject 是什么...

【问题讨论】:

    标签: java android kotlin


    【解决方案1】:

    您只需执行以下操作即可从 kotlin 获取 java 代码:

    1. 菜单 > 工具 > Kotlin > 显示 Kotlin 字节码
    2. 点击反编译按钮
    3. 复制java代码

    使用最新版本 (1.2+) 的 Kotlin 插件,您还可以直接执行菜单 > 工具 > Kotlin -> 将 Kotlin 反编译为 Java。

    【讨论】:

    • 我这样做了,但没有帮助
    • 为什么没有帮助?出了什么问题?
    • 它给了我一些其他的 kt 函数,例如:内在函数、函数 1 和调用 - 如果您想查看反编译结果,我会编辑我的问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2018-11-24
    • 2021-11-06
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多