Kotlin JVM中的null的自定义注释

时间:2018-10-11 08:00:28

标签: java kotlin null annotations

我的目标:编写自定义字段注释,如果将null设置为可为空的变量,则会引发异常。

data class Contact (
    @RequiredAttribute
    var name: String?,
    var number: String?
)

因此,如果我执行类似val contact = Contact(null, "test")的操作,则应该以诸如Attribute name can't be set as null.的消息结尾并出现异常

我的问题:这有可能实现吗?我从来没有用Java或Kotlin编写过自定义注释,所以我对此领域相当陌生。

编辑第二个问题:是否可以检查对象是否具有某些带注释的属性为null,然后引发异常?

1 个答案:

答案 0 :(得分:0)

Kotlin已经为此拥有了一个财产代表:

import kotlin.properties.Delegates

var name: String by Delegates.notNull()

文档:

/**
 * Returns a property delegate for a read/write property with a non-`null` value that is initialized not during
 * object construction time but at a later time. Trying to read the property before the initial value has been
 * assigned results in an exception.
 *
 * @sample samples.properties.Delegates.notNullDelegate
 */
public fun <T: Any> notNull(): ReadWriteProperty<Any?, T> = NotNullVar()

我建议在实现以下目标时使用property delegates:这是惯用的方式,为此添加了属性委托。

如果您确实想在您的Kotlin程序中允许null,则也可以使用kapt进行注释处理。有关此here的更多信息。