Пользовательская аннотация для null в Kotlin JVM - PullRequest
0 голосов
/ 11 октября 2018

Моя цель : написание пользовательской аннотации поля, которая выдает исключение, если для null задана переменная Nullable.

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, поэтому я довольно нуб к этому полю.

РЕДАКТИРОВАТЬ 2-й вопрос : можно ли проверить, есть ли у объекта какие-то аннотированные атрибуты, которыеравны нулю, а затем выдать исключение?

1 Ответ

0 голосов
/ 11 октября 2018

У 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()

Я бы предложил использовать делегатов свойств , когда вы достигнетечто-то вроде этого: это идиоматический способ сделать это, и делегаты свойств были добавлены для этой цели.

Если вы действительно хотите разрешить null s в вашей программе Kotlin, вы также можете выполнять обработку аннотаций с помощью kapt.Подробнее об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...