I have this code sample:
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" } }
I want to be able to use, at compile time, the auto complete feature in conjunction with IntDef annotation, so when i invoke setMeasureText(...)
, the static variables are shown as options to the argument of this method.
I have searched about this, and i couldn't find if Kotlin supported this java-style annotations (intdef for example). So i have tried it, and made an annotation for this, but it won't show in autocompletion.
My question: - Is Java annotation IntDef supported in Kotlin (latest version)
If it is, how can i turn in ON in the Android Studio IDE (if it works, i can't get the compiler to suggest it).
If it is not, is there any Kotlin-way of make this compile time checks
Kotlin |Java. @Retention(value = AnnotationRetention.SOURCE) @Target(allowedTargets = [AnnotationTarget.ANNOTATION_CLASS]) annotation IntDef. Denotes that the annotated element of integer type, represents a logical type and that its value should be one of the explicitly named constants.
Strange thing, but this question comes in search before the same with right answer
Copying it here:
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 } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With