Подтвердить что ты не робот

Аннотирование параметров конструктора в Scala

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

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

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

Ниже не указано ни с val, либо var.

class Person(@Nullable var name: String)

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

4b9b3361

Ответ 1

Вам нужно указать, что должно быть аннотировано, когда вы указываете аннотации параметров конструктора.

Чтобы сделать это, аннотируйте свою аннотацию одним или несколькими аннотациями от 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​​strong > , а не scala.annotation.target

import scala.annotation.meta.{field, param}