允许数据 class 的 属性 只接受某些值

Allow a property of a data class to only accept certain values

先了解一些上下文。在 Android 使用 Kotlin 时,更改可见性的方式如下所示。

myView.visibility = View.VISIBLE

设置任何其他 Int 值而不是 View.VISIBLEView.INVISIBLEView.GONE returns 错误。

现在我有一个 Kotlin 数据 class,它接受类型为 Int 的构造函数参数 flag

如何在我的 Kotlin 代码中以相同的方式实现它,使得 myClass.flag = Flag.A 而没有其他值?

可能只是将其定义为枚举

enum view{
  GONE=0,
  VISIBLE=1,
  INVISIBLE=2,
}

class MyView{
  Public view visibility { get; set; }
}

如果您希望获得与 View.visibility 常量相同的警告行为,则需要为其编写一个 lint 检查。这里有一些关于做这类事情的博客:

https://www.bignerdranch.com/blog/building-custom-lint-checks-in-android/

https://medium.com/@vanniktech/writing-your-first-lint-check-39ad0e90b9e6

如果你想强制一个类型,那么就像人们说的枚举是一种方式,或者你可以使用密封的 class:

sealed class Flag {
    object A : Flag()
    object B : Flag()
}

或者只是在 init 块中放入一个 require 检查,其中包含一个有效常量列表,在运行时处理它!