Hello World

CodeTengu Weekly 碼天狗週刊

如果命運的齒輪沒有出差錯,CodeTengu Weekly 都會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

你也可以關注我們的 FacebookTwitterGitHubOpen Source 專案,有很多 weekly 看不到的內容。有任何建議也歡迎來 Gitter 聊聊。

偶爾致力於解決開發者之間的資訊不對稱  

@saiday@saiday



Nullability annotations 之亂!

最近用 Kotlin 調用 Android SDK,明明看到它的 .java 有 @Nullable 的標註,但 Kotlin 的類型推導卻給了我 Platform Type,檢查發現在 bytecode @Nullable 就被抽掉了。原因是 Android SDK 用的是 android.annotation.Nullable,這個 annotation 並不是公開的 API (AOSP Nullable)

那問題就來了,如果我要重新做人在 Java code 裡標註 nullability,我應該用哪套 package 的 @Nullable?JetBrains 的 org.jetbrains.annotations.Nullable 、 JDK 的 javax.annotation.Nullable 還是 Android 的 android.support.annotation.Nullable

先講結論,寫 Android 用 android.support.annotation.Nullable 因為 Android Studio 的 Lint 只認這個。不是寫 Android 的話就看你的 nullness analysis 工具用哪一套。

Kotlin 開發過程也苦惱過同樣的問題,Kotlin 的 null-safety types 跟對 Java 的兼容性就是魚與熊掌。務實如 Kotlin 這個語言嘗試了很多做法,最後妥協在什麼 package 的 nullness annotation 都參考,如果沒有標註,就 infer Platform Type 給你,你自己管吧。 (More Null-safety for Java 是他們不斷嘗試解決的過程)

是說,為什麼會有這麼多套的 nullness annotations?
啊,沒有錯啦,因為大家都不相容嘛哈哈哈哈

 

@chiahsien@chiahsien






@allanlei@allanlei



工作機會