수색…


통사론

  • @AnAnnotation def someMethod = {...}
  • @AnAnnotation class someClass {...}
  • @AnnotatioWithArgs (annotation_args) def someMethod = {...}

매개 변수

매개 변수 세부
@ 후속 토큰이 주석임을 나타냅니다.
SomeAnnotation 특수 효과의 이름
constructor_args (선택 사항) 주석에 전달 된 인수. 없는 경우 괄호는 불필요합니다.

비고

Scala-lang은 표준 주석과 해당 Java에 대한 목록을 제공합니다.

주석 사용

이 샘플 주석은 다음 메소드가 deprecated 나타냅니다.

@deprecated
def anUnusedLegacyMethod(someArg: Any) =  {
  ...
}

이것은 다음과 같이 동등하게 작성할 수도 있습니다.

@deprecated def anUnusedLegacyMethod(someArg: Any) =  {
  ...
}

주 생성자에 주석 달기

/**
 * @param num Numerator
 * @param denom Denominator
 * @throws ArithmeticException in case `denom` is `0`
 */
class Division @throws[ArithmeticException](/*no annotation parameters*/) protected (num: Int, denom: Int) {
    private[this] val wrongValue = num / denom
    
    /** Integer number
     *  @param num Value */
    protected[Division] def this(num: Int) {
      this(num, 1)
    }
}
object Division {
  def apply(num: Int) = new Division(num)
  def apply(num: Int, denom: Int) = new Division(num, denom)
}

가시성 수정 자 (이 경우 protected )는 같은 줄의 주석 뒤에 와야합니다. 주석이 선택적 매개 변수를 허용하는 경우 (이 경우 @throws 는 선택적 원인을 허용 함 () 생성자 매개 변수 앞에 주석 () :)에 대한 빈 매개 변수 목록을 지정해야합니다.

참고 : 동일한 유형 ( 반복되는 주석 )에서조차도 여러 주석을 지정할 수 있습니다.

보조 팩토리 메소드가없는 사례 클래스 (및 주석에 지정된 원인)와 마찬가지로 :

case class Division @throws[ArithmeticException]("denom is 0") (num: Int, denom: Int) {
    private[this] val wrongValue = num / denom
}

나만의 특수 효과 만들기

scala.annotation.StaticAnnotation 또는 scala.annotation.ClassfileAnnotation에서 파생 된 클래스를 만들어 자신 만의 Scala 주석을 만들 수 있습니다.

package animals
// Create Annotation `Mammal`
class Mammal(indigenous:String) extends scala.annotation.StaticAnnotation

// Annotate class Platypus as a `Mammal`
@Mammal(indigenous = "North America")
class Platypus{}

그런 다음 반사 API를 사용하여 주석을 조사 할 수 있습니다.

scala>import scala.reflect.runtime.{universe ⇒ u}

scala>val platypusType = u.typeOf[Platypus]
platypusType: reflect.runtime.universe.Type = animals.reflection.Platypus

scala>val platypusSymbol = platypusType.typeSymbol.asClass
platypusSymbol: reflect.runtime.universe.ClassSymbol = class Platypus

scala>platypusSymbol.annotations
List[reflect.runtime.universe.Annotation] = List(animals.reflection.Mammal("North America"))


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow