【问题标题】:Kotlin type defKotlin 类型定义
【发布时间】:2019-09-24 10:02:02
【问题描述】:

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

在 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.CASH, TransTypeJava.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 类型以外的值来显示任何错误。任何帮助将不胜感激。

【问题讨论】:

标签: kotlin


【解决方案1】:

试试这个

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

【讨论】:

  • 我在我的现场项目中使用了它,它非常适合我。您在使用时遇到了哪种类型的错误?
  • 即使我传递的值不是指定类型,编译器也不会显示错误
  • 奇怪!!无论如何,如果您需要任何帮助,请告诉我:)
  • 你能分享一下你实现这个函数的伪代码以及调用相同函数的代码
  • 私人乐趣 getUserType(userRoleType: Int){ if(userRoleType == UserRoleType1.MALE){ Log.d("Male", UserRoleType1.MALE.toString()) }else if(userRoleType == UserRoleType1.FEMALE){ Log.d("FEMALE", UserRoleType1.MALE.toString()) } } 我这样调用这个函数 - getUserType(UserRoleType1.MALE)
猜你喜欢
  • 1970-01-01
  • 2019-06-06
  • 2020-08-29
  • 2018-04-04
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多