我知道的类型别名注释的唯一示例是在Scaladoc中。以下是相关部分:
object ScalaJPA {
type Id = javax.persistence.Id @beanGetter
}
import ScalaJPA.Id
class A {
@Id @BeanProperty val x = 0
}
这相当于@(javax.persistence.Id @beanGetter) @BeanProperty val x = 0
在 A 类写作。
type
声明只能处理类型。换句话说,您不能在类型别名中提供实例信息。
一种替代方法是尝试扩展注释。SpaceProperty
下面我为说明目的创建了一个假设:
scala> import scala.annotation._; import scala.annotation.target._; import scala.reflect._;
import scala.annotation._
import scala.annotation.target._
import scala.reflect._
scala> class SpaceProperty(nullValue:String="1",otherValue:Int=1) extends Annotation with StaticAnnotation
scala> class SomeClass(@BeanProperty @(SpaceProperty @beanGetter)(nullValue="0") val x:Int)
defined class SomeClass
scala> class NullValueSpaceProperty extends SpaceProperty(nullValue="0")
defined class NullValueSpaceProperty
scala> class SomeClassAgain(@BeanProperty @(NullValueSpaceProperty @beanGetter) val x:Int)
defined class SomeClassAgain
使用类型别名:
scala> type NVSP = NullValueSpaceProperty @beanGetter
defined type alias NVSP
scala> class SomeClassAgain2(@BeanProperty @NVSP val x:Int)defined class SomeClassAgain2
这个解决方案有一个小问题。Scala 中定义的注解无法在运行时保留。因此,如果您需要在运行时使用注解,您可能需要在 Java 中进行扩展。我说可能是因为我不确定这个限制是否已经被修改。