当前位置: 首页 > 知识库问答 >
问题:

Kotlin Annotation IntDef

华景明
2023-03-14

我有这个代码示例:

class MeasureTextView: TextView {
    constructor(context: Context?) : super(context)
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)

    companion object{
        val UNIT_NONE = -1
        val UNIT_KG = 1
        val UNIT_LB = 0            
    }

    fun setMeasureText(number: Float, unitType: Int){

        val suffix = when(unitType){
            UNIT_NONE -> {
                EMPTY_STRING
            }
            UNIT_KG -> {
                KG_SUFIX
            }
            UNIT_LB -> {
                LB_SUFIX
            }
            else -> throw IllegalArgumentException("Wrong unitType passed to formatter: MeasureTextView.setMeasureText")
        }

        // set the final text
        text = "$number $suffix"
    }
}

我希望能够在编译时将自动完成功能与IntDef注释结合使用,因此当我调用setInstrureText(...)时,静态变量显示为此方法参数的选项。

我对此进行了搜索,但找不到Kotlin是否支持这种java风格的注释(例如intdef)。所以我尝试了它,并为此做了注释,但它不会在自动完成中显示。

我的问题:-Kotlin(最新版本)支持Java注释IntDef吗

>

  • 如果是,我如何在Android Studio IDE中打开它(如果它工作,我无法让编译器提出建议)。

    如果不是,是否有任何静态编程语言来进行编译时间检查

  • 共有3个答案

    柯翔
    2023-03-14

    在Kotlin中使用IntDef的首选方式是使用顶级声明:

    package com.example.tips
    
    
    const val TIP_A = 1
    const val TIP_B = 2
    const val TIP_C = 3
    
    @IntDef(TIP_A, TIP_B, TIP_C)
    @Retention(AnnotationRetention.SOURCE)
    annotation class TipId
    
    
    class TipsDataProvider {
    
        fun markTip(@TipId tipId: Int) {
        ...
        }
    }
    

    不需要额外的类或对象!这里有更多关于顶级声明的信息。

    葛阳华
    2023-03-14

    从静态编程语言1.0.3开始,不支持@IntDef注释,但计划为更高版本提供支持。

    进行这些编译时检查的 Kotlin 方法是使用枚举类而不是一系列 Int 常量。

    宰父正真
    2023-03-14

    奇怪的事情,但这个问题在正确答案之前搜索

    将其复制到此处:

    import android.support.annotation.IntDef
    public class Test {
    
        companion object {
    
             @IntDef(SLOW, NORMAL, FAST)
             @Retention(AnnotationRetention.SOURCE)
             annotation class Speed
    
             const val SLOW = 0
             const val NORMAL = 1
             const val FAST = 2
        }
    
        @Speed
        private var speed: Int=SLOW
    
        public fun setSpeed(@Speed speed: Int) {
            this.speed = speed
        }
    }
    
     类似资料:

    相关问答

    相关文章

    相关阅读