Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Annotating constructor parameters in Scala

Annotating constructor parameters seems to do nothing when compiled to bytecode. I get no compiler warnings either.

The following works. getAnnotations for the name field returns javax.annotation.Nullable.

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

The following doesn't, neither with val or var.

class Person(@Nullable var name: String) 

This is probably not intentional, so is there something I am missing or should I go file a bug report?

like image 960
ponzao Avatar asked Sep 22 '10 13:09

ponzao


1 Answers

You need to specify what should get annotated when you specify annotations on constructor parameters.

To do that annotate your annotation with one ore more annotations from scala.annotation.target, e.g. getter, setter or as in your case field:

import annotation.target.field  class Person(@(Nullable @field) var name: String) 

You can also use type aliases for that:

type NullableField = Nullable @field  class Person(@NullableField var name: String) 

Update Scala 2.12

Now this specific annotation and others are in the package scala.annotation.meta rather than scala.annotation.target

import scala.annotation.meta.{field, param} 
like image 171
Moritz Avatar answered Sep 30 '22 12:09

Moritz