Аннотирующие параметры конструктора в Scala - PullRequest
25 голосов
/ 22 сентября 2010

Аннотирующие параметры конструктора, похоже, ничего не делают при компиляции в байт-код. Я также не получаю предупреждений компилятора.

Следующие работы. getAnnotations для поля name возвращает javax.annotation.Nullable.

class Person {
    @Nullable var name: String = _;
}

Следующие не, ни с val или var.

class Person(@Nullable var name: String)

Это, вероятно, не преднамеренно, так что я что-то упускаю или я должен отправить сообщение об ошибке?

1 Ответ

35 голосов
/ 22 сентября 2010

Необходимо указать, что следует аннотировать при указании аннотаций для параметров конструктора.

Чтобы сделать это, добавьте аннотацию к одной или нескольким аннотациям от scala.annotation.target, например. getter, setter или как в вашем случае field:

import annotation.target.field

class Person(@(Nullable @field) var name: String)

Для этого вы также можете использовать псевдонимы типов:

type NullableField = Nullable @field

class Person(@NullableField var name: String)

Обновление Scala 2.12

Теперь эта конкретная аннотация и другие находятся в пакете scala.annotation.meta , а не scala.annotation.target

import scala.annotation.meta.{field, param}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...