Kotlin 类型定义

标签 kotlin

我正在尝试 IntDef typedef 来限制函数的特定类型参数。但是,当我使用 Java 使用 IntDef 时,它可以正常工作,但与此同时,它不能与 kotlin 一起使用。下面是我的代码片段-

在 JAVA 中 -

@IntDef({CASH,WITHDRAW}) 
@Retention(RetentionPolicy.SOURCE) 
public @interface TransTypeJava { 
int CASH = 1; int WITHDRAW = 2;
}

在 Kotlin 中——

const val CASH = 1 const val WITHDRAW = 2 
@IntDef(CASH, WITHDRAW) 
@kotlin.annotation.Retention(AnnotationRetention.SOURCE) 
internal annotation class TransTypeKotlin

在类里面使用 -

override fun onCreate(savedInstanceState: Bundle?) { 
super.onCreate(savedInstanceState) 
setContentView(R.layout.activity_main) 
demo(TransTypeJava.CASH)// Working 
demo(1) // Showing compile time error 
} 
fun demo(@TransTypeJava type:Int){}

调用演示函数给我一个错误,指出必须是以下之一: TransTypeJava.CASHTransTypeJava.WITHDRAW 通过传递 TransTypeJava 类型以外的值。

override fun onCreate(savedInstanceState: Bundle?) { 
super.onCreate(savedInstanceState) 
setContentView(R.layout.activity_main) 
demo(TransTypeKotlin.CASH) //Working 
demo(1) // Working 
} 
fun demo(@TransTypeKotlin type: Int){} 

在将它与 kotlin 一起使用时,它不会通过传递 TransTypeKotlin 类型以外的值来显示任何错误。任何帮助将不胜感激。

最佳答案

尝试一下

@IntDef(MALE, FEMALE)
@Retention(AnnotationRetention.SOURCE)
annotation class UserRoleType {
    companion object {
        const val MALE = 1
        const val FEMALE = 2
    }
}

关于Kotlin 类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58077786/

相关文章:

android - Kotlin 继承 - 没有为参数上下文传递值

android - 当它专注于 editText 时,如何使状态栏位于其顶部的全屏 Activity ,而滚动条在 Activity 中未完全滚动?

collections - 映射列表值以列出一个类轮

Android Q Kotlin - API 29 : check if image exists

android - 如何让这个三角形指示器在 android jetpack compose 中旋转和移动?

android - 如何在 flatMap 中使用await方法?

android - Dagger 2 将 Activity 的 View 模型注入(inject) fragment

android - 未找到 Google Play 显着披露

java - 用gradle文件同步项目时出现问题

android - 将 kotlin 数据类转换为 json 字符串