@IntDef编译器检查问题


#1
class CalcTypes {
    @IntDef(CalcTypes.COLD, CalcTypes.HEAT, CalcTypes.LIQUIDS, CalcTypes.CALORIES)
    @Retention(AnnotationRetention.SOURCE)
    annotation class CalcType

    companion object {
        const val HEAT = 0L
        const val COLD = 1L
        const val LIQUIDS = 2L
        const val CALORIES = 3L
    }
}

假如我用
fun xxx(@CalcTypes.CalcType type :Long)
定义一个方法,但是调用的时候
xxx(100L)

编译器并没有想用 java 的时候在编译期就给出提醒。 这个有谁知道嘛。。。
Android Studio 版本 4.0.1
Kotlin 版本 1.3.72

我看网络上有人说 1.0.3 之后的kotlin 不支持 @IntDef 了,以后会支持。。。但我再官网上的问题里面又看有开发者说可以用、

:cold_face: 跟着bennyhuo 大佬入坑kotlin小白一只。


#2

这个应该是ide的提示吧,印象中即便用整型值,java编译也是能通过的。

kotlin的部分理论上需要kotlin的android studio插件或者android studio本身提供支持,但可能优先级不高一直没有结论。由于现在d8的优化能力对于简单的枚举是可以优化成整型的,加上kotlin的内联类在逐步完善,intdef可能后面会成为鸡肋。


京ICP备16022265号-2 Kotlin China 2017 - 2018