java - 需要在Java类中使用此方法( Kotlin )

标签 java kotlin

我为此苦苦挣扎。我在Kotlin中有声明此方法的此类,并且我需要在Java类中使用该“onSuccess”,而我不知道该怎么做。

Kotlin课:

open class Callback<T>(val app: NetworkApplication) : retrofit2.Callback<T> {

private var isSuccessful = false
var onSuccess: ((T?) -> Unit)? = null
var onSuccessWithHeaders: ((T?, HashMap<String, String>) -> Unit)? = null
var onNetworkError: (() -> Unit)? = null
var onServerError: ((String?, String?) -> Unit)? = null
var onFinish: ((Boolean?) -> Unit)? = null
var onUnauthorized: (() -> Unit) = {

// app.goToLogin()
}
override fun onResponse(call: Call<T>, response: Response<T>) {
    if (response.isSuccessful) {
        isSuccessful = true
        onSuccess?.invoke(response.body())
        response.headers()
        onSuccessWithHeaders?.invoke(response.body(), getHeaders(response.headers()))

    } else {
        val errorResponse = getErrorResponse(response)
        when (response.code()) {
            401 -> onUnauthorized()
            500 -> {
                onServerError?.invoke(errorResponse?.codigo, errorResponse?.descripcion)
            }
            else -> {
                onServerError?.invoke(errorResponse?.codigo, errorResponse?.descripcion)
            }
        }
    }
    onFinish?.invoke(isSuccessful)
}

override fun onFailure(call: Call<T>, t: Throwable) {
    onNetworkError?.invoke()
    onFinish?.invoke(isSuccessful)
}

private fun getErrorResponse(response: Response<T>): ErrorResponse? {
    try {
        return GsonConverterFactory.create().responseBodyConverter(
            ErrorResponse::class.java!!,
            arrayOfNulls(0),
            null
        )?.convert(response.errorBody()!!) as ErrorResponse?
    } catch (e: IOException) {
        e.printStackTrace()
    }

    return null
}

private fun getHeaders(headers: Headers): HashMap<String, String> {
    val result = HashMap<String, String>()
    for (i in 0 until headers.size()) {
        result[headers.name(i)] = headers.value(i)
    }
    return result
}

}

在Java类中,我尝试了此操作,但没有运气:

首先我宣布:
private Callback<String> entidadesHabilitadasCallback = new Callback<String>((NetworkApplication)this);

然后我试图做这样的事情:
entidadesHabilitadasCallback.setOnSuccess();

但是我必须在这里放一个参数,我不知道该写些什么。

最佳答案

Kotlin Java has interop with lambda function,与java中的SAM转换相同。

您可以这样定义/设置:

entidadesHabilitadasCallback.setOnSuccess(it -> {
    // use it, do something
    return Unit.INSTANCE;
});

关于java - 需要在Java类中使用此方法( Kotlin ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61389378/

相关文章:

java - Perlin 噪声生成无法正常工作

java - 访问最终字段时出现奇怪的 NullPointerException

java - Android Studio中执行aapt失败

android - 为什么在每个 Compose Navigation 路由中创建一个新的 ViewModel?

android - 我正在尝试使用安全参数,但是当我将依赖项添加到项目级别 build.gradle 时,它​​给了我这个错误

Java 子字符串 : 'string index out of range'

java - 判断一个三角形是不是钝角三角形

android - Assignments are not expressions, and only expressions are allowed in this context - 将 Java 转换为 Kotlin 时出错

intellij-idea - IntelliJ Ultimate Kotlin脚本REPL跳过第一条打印行-临时输出被切断

java - 返回数组索引并同时递增