खोज…


वाक्य - विन्यास

  • @AnAnnotation def someMethod = {...}
  • @AnAnnotation class someClass {...}
  • @AnnotatioWithArgs (एनोटेशन_अर्ग्स) someMethod = {...} को हराया

पैरामीटर

पैरामीटर विवरण
@ इंगित करता है कि टोकन निम्नलिखित एक एनोटेशन है।
SomeAnnotation एनोटेशन का नाम
constructor_args (वैकल्पिक) एनोटेशन के लिए दिए गए तर्क। यदि कोई नहीं है, तो कोष्ठक अनावश्यक हैं।

टिप्पणियों

स्काला-लैंग मानक एनोटेशन और उनके जावा समकक्षों की एक सूची प्रदान करता है।

एनोटेशन का उपयोग करना

यह नमूना एनोटेशन इंगित करता है कि निम्न विधि 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 वैकल्पिक @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 से निकाली गई कक्षाएं बनाकर आप स्वयं स्कैला एनोटेशन बना सकते हैं

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{}

तब प्रतिबिंब एपीआई का उपयोग कर पूछताछ की जा सकती है।

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