2 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
Kotlin 將擴(kuò)展屬性編譯成靜態(tài)方法。String這是一個(gè)在名為 的文件中擴(kuò)展類(lèi)的示例StringUtils.kt:
val String.greeting
get() = "hello $this"
所以一個(gè)非常簡(jiǎn)單的方法,當(dāng)在 kotlin 中調(diào)用時(shí)"fred".greeting會(huì)返回hello fred。
如果檢查 kotlin 字節(jié)碼并在 IDE 中對(duì)其進(jìn)行反編譯,可以看到結(jié)果類(lèi)似于:
public final class StringUtilsKt {
@NotNull
public static final String getGreeting(@NotNull String $this$greeting) {
Intrinsics.checkParameterIsNotNull($this$greeting, "$this$greeting");
return "hello " + $this$greeting;
}
}
類(lèi)中的靜態(tài)方法StringUtilsKt。這意味著您可以簡(jiǎn)單地從 java 中調(diào)用它StringUtilsKt.getGreeting("fred"),它會(huì)產(chǎn)生相同的輸出。
PS:這與擴(kuò)展功能非常相似。它們也被編譯成靜態(tài)方法,但名稱(chēng)通常不會(huì)改變。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
在反編譯 Kotlin 的字節(jié)碼后,我得到了這個(gè):
@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 我可以這樣調(diào)用:
@Override
public void onTangoResponse(@NotNull Response<?> response) {
boolean isSuccessful = response.isSuccessful();
if (isSuccessful) { // code >= 200 && code < 300;
} else {
ErrorResponse errorResponse = getErrorResponse(response);
}
}
添加回答
舉報(bào)