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);
}
}
添加回答
舉報