黒猿の家:Scala注釈実現

1471 ワード

個人的には、私のマニュアルで学んだことは、自分たちのScala注釈を実現するために強い意志と必要はないと思います.この章の主旨は、すでにある注釈類がどのように実現した注釈がAnnotationの特質を拡張しなければならないかを理解させることです.たとえばunchecked注記は次のように定義されます.
class unchecked extends annotation.Annotation

タイプ注記はTypeAnnotationte特質から拡張する必要があります
class Localized extends StaticAnnotation with TypeConstraint

自分の注釈を実現することができますが、ScalaとJavaが提供する注釈を使用することが多いです. : Java , Java 。 , Scala
一般的に、注釈の役割は、注釈される式、変数、フィールド、メソッド、クラス、またはタイプを記述することです.例えば、以下の注釈
def check(@Notnull password:String)

パラメータ変数passwordの場合ですが、Scalaのフィールド定義では複数のJavaプロパティが引き出され、注釈が追加される可能性があります.たとえば次のような定義があります.
class Credentials(@Notnull @BeanProperty var username:String)

ここで、注釈可能なターゲット(1)コンストラクタパラメータ(2)のプライベートなサンプルフィールド(3)値取りメソッドusername(4)値変更メソッドusername=(5)beanサンプラgetUsername(6)beanモディファイヤsetUsernameのデフォルトでは、コンストラクタパラメータ注記は、パラメータ自体にのみ適用され、フィールド注記はフィールドにのみ適用されます.メタ注記@param,@field,@getter,@setter,@beanGetter,@beanSerterは、他の場所に注記を添付します.たとえば、@deprecated注記の定義は次のようになります.
@getter @setter @beanGetter @beanSetter
class deprecated(message:String =””,since:String =””)  extends annotation.StaticAnnotation

必要に応じて一時的にこれらのメタ注釈を適用することもできます
@Entity class Credentials{
  @(Id @beanGetter) @BeanProperty var id = 0
}

この場合,@Id注記はJavaのgetIdメソッドに適用される(これはJPAが要求するメソッドであり,属性フィールドにアクセスするためのものである)