私が知っている型エイリアシング アノテーションの唯一の例は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
宣言は型のみを扱うことができます。つまり、型エイリアスでインスタンス情報を提供することはできません。
1 つの代替手段は、注釈を拡張しようとすることです。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
このソリューションには小さな問題が 1 つあります。Scala で定義された注釈は、実行時に保持できませんでした。そのため、実行時にアノテーションを使用する必要がある場合は、Java で拡張を行う必要がある場合があります。この制限がすでに修正されているかどうかわからないため、可能性があると言います。