java - java代码中使用kotlin时void无法转换为Unit - android

标签 java android kotlin

我在我的项目中一起使用kotlinjava,我有一个类kotlin,如下所示:

class AuthenticationPresenter @Inject constructor(
    private val navigator: AuthenticationNavigator,
    private val getCurrentServerInteractor: GetCurrentServerInteractor,
    private val getAccountInteractor: GetAccountInteractor,
    private val settingsRepository: SettingsRepository,
    private val localRepository: LocalRepository,
    private val tokenRepository: TokenRepository
) {
    suspend fun loadCredentials(newServer: Boolean, callback: (authenticated: Boolean) -> Unit) {
        val currentServer = getCurrentServerInteractor.get()
        val serverToken = currentServer?.let { tokenRepository.get(currentServer) }
        val settings = currentServer?.let { settingsRepository.get(currentServer) }
        val account = currentServer?.let { getAccountInteractor.get(currentServer) }

        account?.let {
            localRepository.save(LocalRepository.CURRENT_USERNAME_KEY, account.userName)
        }

        if (newServer || currentServer == null || serverToken == null || settings == null || account?.userName == null) {
            callback(false)
        } else {
            callback(true)
            navigator.toChatList()
        }
    }
}

我正在将以下代码(kotlin)转换为java:

presenter.loadCredentials(newServer || deepLinkInfo != null) { authenticated ->
    if (!authenticated) {
        showServerInput(deepLinkInfo)
    }
}

这是我将代码转换为 java 但出现错误:

presenter.loadCredentials((newServer || deepLinkInfo != null), authenticated ->{
    if (!authenticated) {
        showServerInput(deepLinkInfo);
    }
});

但请告诉我:缺少 return 语句

我可以在 Java 代码中使用这个 loadCredentials 做什么?

showServerInput的代码:

fun showServerInput(deepLinkInfo: LoginDeepLinkInfo?) {
    addFragment(TAG_SERVER_FRAGMENT, R.id.fragment_container, allowStateLoss = true) {
        ServerFragment.newInstance(deepLinkInfo)
    }
}

最佳答案

之前的所有答案都没有包含您需要返回 Unit 实例的部分,一旦我这样做了,我就能够解决类似的问题。

原始问题有一个小问题,即“AA”无法返回,因此会抛出错误,而您需要调用一个方法。

以下是针对此问题的具体操作方法。

presenter.loadCredentials((newServer || deepLinkInfo != null), authenticated ->{
    if (!authenticated) {
        showServerInput(deepLinkInfo); // Here!
    } else {
        myOtherMethod();
    }
    return Unit.INSTANCE;
});

关于java - java代码中使用kotlin时void无法转换为Unit - android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52345084/

相关文章:

java - 如何在 JSP(java) 中实现 PHP file_get_contents() 函数?

java - 处理文本文件中 Unicode BOM 的正确方法

javascript - 使用 PhoneGap 从设备的图片库中选择多张照片

android - 新 Flutter 项目的 `Unresolved reference: android`

java - Jersey Provider 未以编程方式获取上下文

java - 能否将 GWT 配置为在用户主文件夹以外的其他位置创建缓存文件?

android - 如何在 Android Wear 2.0 上获取配对设备信息

java - 开始制作Android应用程序

使用带有数据的 Runtime.getRuntime.exec 错误的 kotlin 中的 CURL POST 请求

kotlin - 在 build.gradle.kts 中设置环境变量