2 回答
TA贡献1829条经验 获得超4个赞
Kotlin 将扩展属性编译成静态方法。String这是一个在名为 的文件中扩展类的示例StringUtils.kt:
val String.greeting
get() = "hello $this"
所以一个非常简单的方法,当在 kotlin 中调用时"fred".greeting会返回hello fred。
如果检查 kotlin 字节码并在 IDE 中对其进行反编译,可以看到结果类似于:
public final class StringUtilsKt {
@NotNull
public static final String getGreeting(@NotNull String $this$greeting) {
Intrinsics.checkParameterIsNotNull($this$greeting, "$this$greeting");
return "hello " + $this$greeting;
}
}
类中的静态方法StringUtilsKt。这意味着您可以简单地从 java 中调用它StringUtilsKt.getGreeting("fred"),它会产生相同的输出。
PS:这与扩展功能非常相似。它们也被编译成静态方法,但名称通常不会改变。
TA贡献1784条经验 获得超2个赞
在反编译 Kotlin 的字节码后,我得到了这个:
@NotNull
public final ErrorResponse getErrorResponse(@NotNull Response $this$errorResponse) {
Intrinsics.checkParameterIsNotNull($this$errorResponse, "$this$errorResponse");
ErrorResponse var10000 = ErrorUtils.parseError($this$errorResponse);
Intrinsics.checkExpressionValueIsNotNull(var10000, "ErrorUtils.parseError(this)");
return var10000;
}
所以从 Java 我可以这样调用:
@Override
public void onTangoResponse(@NotNull Response<?> response) {
boolean isSuccessful = response.isSuccessful();
if (isSuccessful) { // code >= 200 && code < 300;
} else {
ErrorResponse errorResponse = getErrorResponse(response);
}
}
添加回答
举报