SlideShare una empresa de Scribd logo
1 de 23
   Introducing Annotations 


                                      Rishi Khandelwal
                                      Software Consultant     
                                          Knoldus
AGENDA
●
    What is Annotations.


    Why have Annotations.


    Syntax of Annotations.


    Types Of Annotation


    Standard Annotations.


    Example of Annotation


    Writing your own annotations


    Comparison of scala annotation with java.
What is Annotations
➔
    Annotations are structured information added to program source
    code.

➔
    Annotations associate meta-information with definitions.

➔
    They can be attached to any variable, method, expression, or
    other program element

➔
    Like comments, they can be sprinkled throughout a program .

➔
     Unlike comments, they have structure, thus making them easier
    to machine process.
Why have Annotations

Meta Programming Tools : They are programs that take other programs as
                         input.
Task performed :

1. Automatic generation of documentation as with Scaladoc.

2. Pretty printing code so that it matches your preferred style.

3. Checking code for common errors such as opening a file but, on some
   control paths, never closing it.

4. Experimental type checking, for example to manage side effects or
   ensure ownership properties.
Improvement after using Annotations :

1. Automatic generation of documentation as with Scaladoc.

➔
    A documentation generator could be instructed to document certain
    methods as deprecated.


2. Pretty printing code so that it matches your preferred style.

➔
    A pretty printer could be instructed to skip over parts of the program
    that have been carefully hand formatted.
Improvement after using Annotations :

3. Checking code for common errors such as opening a file but, on some
   control paths, never closing it.

➔
    A checker for non-closed files could be instructed to ignore a particular
    file that has been manually verified to be closed.


4. Experimental type checking, for example to manage side effects or
   ensure ownership properties.

➔
    A side-effects checker could be instructed to verify that a specified
    method has no side effects.
Syntax of annotations
Annotations are allowed on any kind of declaration or definition, including
vals, vars, defs, classes, objects, traits, and types.

●
    Method Annotation:        @deprecated def bigMistake() = //..

●
    Classes Annotation:       @serializable class C { ... }

●
    Expressions Annotation:   (e: @unchecked) match {
                                 // non-exhaustive cases...
                              }
●
    Type Annotation :         String @local

●
    Variable Annotation :     @transient @volatile var m: Int
Syntax of annotations

Annotations have a richer general form:
@annot(exp1 , exp2 , ...) {val name1 =const1 , ..., val namen =constn }

●
    The annot specifies the class of annotation.

●
    The exp parts are arguments to the annotation

●
    The name=const pairs are available for more complicated annotations.

●
    These arguments are optional, and they can be specified in any order.

●
    To keep things simple, the part to the right-hand side of the equals sign
     must be a constant.
Types of Annotations
●
    No arguments Annotations :

    For no arguments annotations like @deprecated ,leave off the parentheses,
     but we can write @deprecated() .

●
    Argument annotations

    For annotations that do have arguments, place the arguments in
    parentheses. example, @serial(1234) .
Types of Annotations
●
    The precise form of the arguments depends on the particular annotation
    class.

●
    Most annotation processors allow only constants such as 123 or "hello".

●
    The compiler itself supports arbitrary expressions, however, so long as they
     type check.

    for example, @cool val normal = "Hello"
                 @coolerThan(normal) val fonzy = "Heeyyy"
Standard annotations
Deprecation : (@deprecated)

●
    This is used with class and methods.

●
    When anyone calls that method or class will get a deprecation warning.

●
    Syntax : @deprecated def bigMistake() = //..


Volatile Fields : (@volatile)

●
 This annotations helps programmers to use mutable state in their
concurrent programs.
Standard annotations
●
    It informs the compiler that the variable in question will be used by multiple
    threads

●
    The @volatile keyword gives different guarantees on different platforms.

●
    On the Java platform, it behaves same as Java volatile modifier.


●
    Binary serialization :

●
    It means to convert objects into a stream of bytes and vice versa.

●
    Many languages include a framework for binary serialization.
Standard annotations
●
    Scala does not have its own serialization framework.

●
    Scala provides 3 annotations that are useful for a variety of frameworks.

1. (a) The first annotation indicates whether a class is serializable at all

     (b) Add a @serializable annotation to any class which we would like to
         be serializable.

2. (a) The second annotation helps deal with serializable classes changing as
       time goes by.

    (b) We can attach a serial number to the current version of a class by
        adding an annotation like @SerialVersionUID(<longlit>)
Standard annotations
    (c) If we want to make a serialization-incompatible change to our class,
        then we can change the version number.

3. (a) Scala provides a @transient annotation for fields that should not be
      serialized at all.

    (b) The framework should not save the field even when the surrounding
         object is serialized.


Automatic get and set methods : (@scala.reflect.BeanProperty)

●
    Scala code normally does not need explicit get and set methods for fields.
Standard annotations
●
    Some platform-specific frameworks do expect get and set methods.

●
    For that purpose, Scala provides the @scala.reflect.BeanProperty
    annotation.

●
    The generated get and set methods are only available after a compilation
    pass completes.

●
    We cannot call these get and set methods from code we compile at the same
    time as the annotated fields.

●
    This should not be a problem in Scala, because in Scala code we can access
    the fields directly.
Standard annotations
●
    This feature is intended to support frameworks that expect regular
    get and set methods, and typically we do not compile the framework and
    the code that uses it at the same time.


Unchecked : (@unchecked)

The @unchecked annotation is interpreted by the compiler during pattern
●


matches.

●
 It tells the compiler not to worry if the match expression seems to
leave out some cases.
Example of annotations
Scala Class : (Reader.scala)
package ppt
import java.io._
class Reader(fname: String) {
  private val in = new BufferedReader(new FileReader(fname))
  @throws(classOf[IOException])
  def read() = in.read()
 }
Java Class :(AnnotaTest.java)
package test;
import ppt.Reader; // Scala class !!
public class AnnotaTest {
   public static void main(String[] args) {
      try {
         Reader in = new Reader(args[0]);
         int c;
         while ((c = in.read()) != -1) {
            System.out.print((char) c);
         } } catch (java.io.IOException e) {
         System.out.println(e.getMessage());
      } }}
Example of annotations
Scala Class : (Reader.scala)
package ppt
import java.io._
class Reader(fname: String) {
  private val in = new BufferedReader(new FileReader(fname))
  @throws(classOf[IOException])
  def read() = in.read()
 }
Java Class :(AnnotaTest.java)
package test;
import ppt.Reader; // Scala class !!
public class AnnotaTest {
   public static void main(String[] args) {
      try {
         Reader in = new Reader(args[0]);
         int c;
         while ((c = in.read()) != -1) {
            System.out.print((char) c);
         } } catch (java.io.IOException e) {
         System.out.println(e.getMessage());
      } }}
Example of annotations
Scala Class : (Person.scala)
Package my.scala.stuff;
import scala.reflect.BeanProperty
class Person {
 @BeanProperty
 var name = "Dave"

    var age = 36
}
Java Class :(UsingBeanProperty.java)
package my.java.stuff;
import my.scala.stuff.*;
public class UsingBeanProperty {
  public UsingBeanProperty(Person p) {
     // Scala has added this method for us
     System.out.println(p.getName());

         // Since we didn't annotate "age", we can't do this:
         System.out.println(p.getAge()); // compile error!
     }
}
Writing your own annotations
To make an annotation that is visible to Java reflection, we must use Java notation and
compile it with javac.
Example :
Java class ; (Ignore.java)
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Ignore { }

Scala Object : (Tests.scala)
object Tests {
@Ignore
def testData = List(0, 1, -1, 5, -5)
def test1 {
assert(testData == (testData.head :: testData.tail))
}
def test2 {
assert(testData.contains(testData.head))
}}
Writing your own annotations
To see when these annotations are present,use the Java reflection APIs.
Example :
Tests.getClass.getMethods foreach {
 method =>
 if (method.getAnnotation(classOf[Ignore]) == null &&
method.getName.startsWith("test"))
   {
      println(method)
   }}


Output :
public void ppt.Tests$.test2()
public void ppt.Tests$.test1()
Comparison of scala annotation with java

        Scala                        Java
 scala.SerialVersionUID       serialVersionUID (field)
 scala.cloneable              java.lang.Cloneable
 scala.deprecated             java.lang.Deprecated
 scala.inline                 no equivalent
 scala.native                 native (keyword)
 scala.remote                 java.rmi.Remote
 scala.serializable           java.io.Serializable
 scala.throws                 throws (keyword)
 scala.transient              transient (keyword)
 scala.unchecked              no equivalent
 scala.volatile               volatile (keyword)
 scala.reflect.BeanProperty   Design pattern
Annotations

Más contenido relacionado

La actualidad más candente

Summarizing powerpoint
Summarizing powerpointSummarizing powerpoint
Summarizing powerpoint
stefaniejanko
 
Paragraph and essay structure
Paragraph and essay structureParagraph and essay structure
Paragraph and essay structure
pernak
 
How to write a descriptive essay
How to write a descriptive essayHow to write a descriptive essay
How to write a descriptive essay
Lama Albabtain
 
Brief Overview of the Writing Process
Brief Overview of the Writing ProcessBrief Overview of the Writing Process
Brief Overview of the Writing Process
weigansm
 

La actualidad más candente (20)

Summarizing powerpoint
Summarizing powerpointSummarizing powerpoint
Summarizing powerpoint
 
Paragraph and essay structure
Paragraph and essay structureParagraph and essay structure
Paragraph and essay structure
 
Summary Writing
Summary WritingSummary Writing
Summary Writing
 
Recognizing and interpreting cohesive devices
Recognizing and interpreting cohesive devicesRecognizing and interpreting cohesive devices
Recognizing and interpreting cohesive devices
 
Critical reading
Critical readingCritical reading
Critical reading
 
How to write a descriptive essay
How to write a descriptive essayHow to write a descriptive essay
How to write a descriptive essay
 
Descriptive writing
Descriptive writing Descriptive writing
Descriptive writing
 
Descriptive Essay Writing
Descriptive Essay WritingDescriptive Essay Writing
Descriptive Essay Writing
 
Text analysis presentation ppt
Text analysis presentation pptText analysis presentation ppt
Text analysis presentation ppt
 
Brief Overview of the Writing Process
Brief Overview of the Writing ProcessBrief Overview of the Writing Process
Brief Overview of the Writing Process
 
Paragraph Writing
Paragraph WritingParagraph Writing
Paragraph Writing
 
How to write a descriptive essay
How to write a descriptive essayHow to write a descriptive essay
How to write a descriptive essay
 
Types Of Essay
Types Of EssayTypes Of Essay
Types Of Essay
 
Paragraph writing
Paragraph writingParagraph writing
Paragraph writing
 
Features of academic writing
Features of academic writing Features of academic writing
Features of academic writing
 
Undersatnding Compare & Contrast in Reading
Undersatnding Compare & Contrast in ReadingUndersatnding Compare & Contrast in Reading
Undersatnding Compare & Contrast in Reading
 
Paragraph writting
Paragraph writtingParagraph writting
Paragraph writting
 
Pre-Writing Strategies
Pre-Writing StrategiesPre-Writing Strategies
Pre-Writing Strategies
 
Paragraph writing
Paragraph writingParagraph writing
Paragraph writing
 
Expository Essay
Expository EssayExpository Essay
Expository Essay
 

Destacado

Annotations and cornell note taking
Annotations and cornell note takingAnnotations and cornell note taking
Annotations and cornell note taking
carawc
 
Annotating a text
Annotating a textAnnotating a text
Annotating a text
March91989
 
How to annotate
How to annotateHow to annotate
How to annotate
terlin95
 
Chicago manual of style
Chicago manual of styleChicago manual of style
Chicago manual of style
Sadaqat Ali
 

Destacado (20)

Java Annotation
Java AnnotationJava Annotation
Java Annotation
 
How to annotate
How to annotateHow to annotate
How to annotate
 
Annotations and cornell note taking
Annotations and cornell note takingAnnotations and cornell note taking
Annotations and cornell note taking
 
Annotating Text: A Powerful Reading Tool
Annotating Text: A Powerful Reading ToolAnnotating Text: A Powerful Reading Tool
Annotating Text: A Powerful Reading Tool
 
Understanding Annotations in Java
Understanding Annotations in JavaUnderstanding Annotations in Java
Understanding Annotations in Java
 
Reading and Annotation
Reading and AnnotationReading and Annotation
Reading and Annotation
 
Annotating a text
Annotating a textAnnotating a text
Annotating a text
 
How to annotate non fiction text
How to annotate non fiction textHow to annotate non fiction text
How to annotate non fiction text
 
Scala Reflection & Runtime MetaProgramming
Scala Reflection & Runtime MetaProgrammingScala Reflection & Runtime MetaProgramming
Scala Reflection & Runtime MetaProgramming
 
Java annotations
Java annotationsJava annotations
Java annotations
 
How to annotate
How to annotateHow to annotate
How to annotate
 
Annotation Guide: Romeo and Juliet - William Shakespeare
Annotation Guide: Romeo and Juliet - William ShakespeareAnnotation Guide: Romeo and Juliet - William Shakespeare
Annotation Guide: Romeo and Juliet - William Shakespeare
 
CMS Documentation
CMS DocumentationCMS Documentation
CMS Documentation
 
Interactive web prototyping
Interactive web prototypingInteractive web prototyping
Interactive web prototyping
 
Java Generics: What it is and How to Implement it
Java Generics: What it is and How to Implement itJava Generics: What it is and How to Implement it
Java Generics: What it is and How to Implement it
 
Scala reflection
Scala reflectionScala reflection
Scala reflection
 
Chicago manual of style
Chicago manual of styleChicago manual of style
Chicago manual of style
 
Style Manuals
Style ManualsStyle Manuals
Style Manuals
 
Hair Transplant Results including male, female, eyelash, eyebrow, scalp and s...
Hair Transplant Results including male, female, eyelash, eyebrow, scalp and s...Hair Transplant Results including male, female, eyelash, eyebrow, scalp and s...
Hair Transplant Results including male, female, eyelash, eyebrow, scalp and s...
 
Annotated Bibliography
Annotated BibliographyAnnotated Bibliography
Annotated Bibliography
 

Similar a Annotations

Java annotations
Java annotationsJava annotations
Java annotations
Sujit Kumar
 
imperative programming language, java, android
imperative programming language, java, androidimperative programming language, java, android
imperative programming language, java, android
i i
 

Similar a Annotations (20)

Java Annotations
Java AnnotationsJava Annotations
Java Annotations
 
Intro to Scala
 Intro to Scala Intro to Scala
Intro to Scala
 
Java annotations
Java annotationsJava annotations
Java annotations
 
Basics java programing
Basics java programingBasics java programing
Basics java programing
 
Generics and collections in Java
Generics and collections in JavaGenerics and collections in Java
Generics and collections in Java
 
Scala presentationjune112011
Scala presentationjune112011Scala presentationjune112011
Scala presentationjune112011
 
Introduction to JAVA
Introduction to JAVAIntroduction to JAVA
Introduction to JAVA
 
Introduction to C#
Introduction to C#Introduction to C#
Introduction to C#
 
Java for Mainframers
Java for MainframersJava for Mainframers
Java for Mainframers
 
Annotations
AnnotationsAnnotations
Annotations
 
imperative programming language, java, android
imperative programming language, java, androidimperative programming language, java, android
imperative programming language, java, android
 
java: basics, user input, data type, constructor
java:  basics, user input, data type, constructorjava:  basics, user input, data type, constructor
java: basics, user input, data type, constructor
 
Annotations in Java with Example.pdf
Annotations in Java with Example.pdfAnnotations in Java with Example.pdf
Annotations in Java with Example.pdf
 
Java notes
Java notesJava notes
Java notes
 
Core Java Programming Language (JSE) : Chapter X - I/O Fundamentals
Core Java Programming Language (JSE) : Chapter X - I/O Fundamentals Core Java Programming Language (JSE) : Chapter X - I/O Fundamentals
Core Java Programming Language (JSE) : Chapter X - I/O Fundamentals
 
Introduction
IntroductionIntroduction
Introduction
 
Managing Binary Compatibility in Scala (Scala Lift Off 2011)
Managing Binary Compatibility in Scala (Scala Lift Off 2011)Managing Binary Compatibility in Scala (Scala Lift Off 2011)
Managing Binary Compatibility in Scala (Scala Lift Off 2011)
 
(6) c sharp introduction_advanced_features_part_i
(6) c sharp introduction_advanced_features_part_i(6) c sharp introduction_advanced_features_part_i
(6) c sharp introduction_advanced_features_part_i
 
Learn To Code: Introduction to java
Learn To Code: Introduction to javaLearn To Code: Introduction to java
Learn To Code: Introduction to java
 
Java programming basics
Java programming basicsJava programming basics
Java programming basics
 

Más de Knoldus Inc.

Más de Knoldus Inc. (20)

Supply chain security with Kubeclarity.pptx
Supply chain security with Kubeclarity.pptxSupply chain security with Kubeclarity.pptx
Supply chain security with Kubeclarity.pptx
 
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML ParsingMastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
 
Akka gRPC Essentials A Hands-On Introduction
Akka gRPC Essentials A Hands-On IntroductionAkka gRPC Essentials A Hands-On Introduction
Akka gRPC Essentials A Hands-On Introduction
 
Entity Core with Core Microservices.pptx
Entity Core with Core Microservices.pptxEntity Core with Core Microservices.pptx
Entity Core with Core Microservices.pptx
 
Introduction to Redis and its features.pptx
Introduction to Redis and its features.pptxIntroduction to Redis and its features.pptx
Introduction to Redis and its features.pptx
 
GraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdfGraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdf
 
NuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptxNuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptx
 
Data Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable TestingData Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable Testing
 
K8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose KubernetesK8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose Kubernetes
 
Introduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptxIntroduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptx
 
Robusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxRobusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptx
 
Optimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxOptimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptx
 
Azure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxAzure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptx
 
CQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxCQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptx
 
ETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake Presentation
 
Scripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationScripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics Presentation
 
Getting started with dotnet core Web APIs
Getting started with dotnet core Web APIsGetting started with dotnet core Web APIs
Getting started with dotnet core Web APIs
 
Introduction To Rust part II Presentation
Introduction To Rust part II PresentationIntroduction To Rust part II Presentation
Introduction To Rust part II Presentation
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Configuring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAConfiguring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRA
 

Annotations

  • 1.    Introducing Annotations   Rishi Khandelwal                                       Software Consultant    Knoldus
  • 2. AGENDA ● What is Annotations.  Why have Annotations.  Syntax of Annotations.  Types Of Annotation  Standard Annotations.  Example of Annotation  Writing your own annotations  Comparison of scala annotation with java.
  • 3. What is Annotations ➔ Annotations are structured information added to program source code. ➔ Annotations associate meta-information with definitions. ➔ They can be attached to any variable, method, expression, or other program element ➔ Like comments, they can be sprinkled throughout a program . ➔ Unlike comments, they have structure, thus making them easier to machine process.
  • 4. Why have Annotations Meta Programming Tools : They are programs that take other programs as input. Task performed : 1. Automatic generation of documentation as with Scaladoc. 2. Pretty printing code so that it matches your preferred style. 3. Checking code for common errors such as opening a file but, on some control paths, never closing it. 4. Experimental type checking, for example to manage side effects or ensure ownership properties.
  • 5. Improvement after using Annotations : 1. Automatic generation of documentation as with Scaladoc. ➔ A documentation generator could be instructed to document certain methods as deprecated. 2. Pretty printing code so that it matches your preferred style. ➔ A pretty printer could be instructed to skip over parts of the program that have been carefully hand formatted.
  • 6. Improvement after using Annotations : 3. Checking code for common errors such as opening a file but, on some control paths, never closing it. ➔ A checker for non-closed files could be instructed to ignore a particular file that has been manually verified to be closed. 4. Experimental type checking, for example to manage side effects or ensure ownership properties. ➔ A side-effects checker could be instructed to verify that a specified method has no side effects.
  • 7. Syntax of annotations Annotations are allowed on any kind of declaration or definition, including vals, vars, defs, classes, objects, traits, and types. ● Method Annotation: @deprecated def bigMistake() = //.. ● Classes Annotation: @serializable class C { ... } ● Expressions Annotation: (e: @unchecked) match { // non-exhaustive cases... } ● Type Annotation : String @local ● Variable Annotation : @transient @volatile var m: Int
  • 8. Syntax of annotations Annotations have a richer general form: @annot(exp1 , exp2 , ...) {val name1 =const1 , ..., val namen =constn } ● The annot specifies the class of annotation. ● The exp parts are arguments to the annotation ● The name=const pairs are available for more complicated annotations. ● These arguments are optional, and they can be specified in any order. ● To keep things simple, the part to the right-hand side of the equals sign must be a constant.
  • 9. Types of Annotations ● No arguments Annotations : For no arguments annotations like @deprecated ,leave off the parentheses, but we can write @deprecated() . ● Argument annotations For annotations that do have arguments, place the arguments in parentheses. example, @serial(1234) .
  • 10. Types of Annotations ● The precise form of the arguments depends on the particular annotation class. ● Most annotation processors allow only constants such as 123 or "hello". ● The compiler itself supports arbitrary expressions, however, so long as they type check. for example, @cool val normal = "Hello" @coolerThan(normal) val fonzy = "Heeyyy"
  • 11. Standard annotations Deprecation : (@deprecated) ● This is used with class and methods. ● When anyone calls that method or class will get a deprecation warning. ● Syntax : @deprecated def bigMistake() = //.. Volatile Fields : (@volatile) ● This annotations helps programmers to use mutable state in their concurrent programs.
  • 12. Standard annotations ● It informs the compiler that the variable in question will be used by multiple threads ● The @volatile keyword gives different guarantees on different platforms. ● On the Java platform, it behaves same as Java volatile modifier. ● Binary serialization : ● It means to convert objects into a stream of bytes and vice versa. ● Many languages include a framework for binary serialization.
  • 13. Standard annotations ● Scala does not have its own serialization framework. ● Scala provides 3 annotations that are useful for a variety of frameworks. 1. (a) The first annotation indicates whether a class is serializable at all (b) Add a @serializable annotation to any class which we would like to be serializable. 2. (a) The second annotation helps deal with serializable classes changing as time goes by. (b) We can attach a serial number to the current version of a class by adding an annotation like @SerialVersionUID(<longlit>)
  • 14. Standard annotations (c) If we want to make a serialization-incompatible change to our class, then we can change the version number. 3. (a) Scala provides a @transient annotation for fields that should not be serialized at all. (b) The framework should not save the field even when the surrounding object is serialized. Automatic get and set methods : (@scala.reflect.BeanProperty) ● Scala code normally does not need explicit get and set methods for fields.
  • 15. Standard annotations ● Some platform-specific frameworks do expect get and set methods. ● For that purpose, Scala provides the @scala.reflect.BeanProperty annotation. ● The generated get and set methods are only available after a compilation pass completes. ● We cannot call these get and set methods from code we compile at the same time as the annotated fields. ● This should not be a problem in Scala, because in Scala code we can access the fields directly.
  • 16. Standard annotations ● This feature is intended to support frameworks that expect regular get and set methods, and typically we do not compile the framework and the code that uses it at the same time. Unchecked : (@unchecked) The @unchecked annotation is interpreted by the compiler during pattern ● matches. ● It tells the compiler not to worry if the match expression seems to leave out some cases.
  • 17. Example of annotations Scala Class : (Reader.scala) package ppt import java.io._ class Reader(fname: String) { private val in = new BufferedReader(new FileReader(fname)) @throws(classOf[IOException]) def read() = in.read() } Java Class :(AnnotaTest.java) package test; import ppt.Reader; // Scala class !! public class AnnotaTest { public static void main(String[] args) { try { Reader in = new Reader(args[0]); int c; while ((c = in.read()) != -1) { System.out.print((char) c); } } catch (java.io.IOException e) { System.out.println(e.getMessage()); } }}
  • 18. Example of annotations Scala Class : (Reader.scala) package ppt import java.io._ class Reader(fname: String) { private val in = new BufferedReader(new FileReader(fname)) @throws(classOf[IOException]) def read() = in.read() } Java Class :(AnnotaTest.java) package test; import ppt.Reader; // Scala class !! public class AnnotaTest { public static void main(String[] args) { try { Reader in = new Reader(args[0]); int c; while ((c = in.read()) != -1) { System.out.print((char) c); } } catch (java.io.IOException e) { System.out.println(e.getMessage()); } }}
  • 19. Example of annotations Scala Class : (Person.scala) Package my.scala.stuff; import scala.reflect.BeanProperty class Person { @BeanProperty var name = "Dave" var age = 36 } Java Class :(UsingBeanProperty.java) package my.java.stuff; import my.scala.stuff.*; public class UsingBeanProperty { public UsingBeanProperty(Person p) { // Scala has added this method for us System.out.println(p.getName()); // Since we didn't annotate "age", we can't do this: System.out.println(p.getAge()); // compile error! } }
  • 20. Writing your own annotations To make an annotation that is visible to Java reflection, we must use Java notation and compile it with javac. Example : Java class ; (Ignore.java) import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Ignore { } Scala Object : (Tests.scala) object Tests { @Ignore def testData = List(0, 1, -1, 5, -5) def test1 { assert(testData == (testData.head :: testData.tail)) } def test2 { assert(testData.contains(testData.head)) }}
  • 21. Writing your own annotations To see when these annotations are present,use the Java reflection APIs. Example : Tests.getClass.getMethods foreach { method => if (method.getAnnotation(classOf[Ignore]) == null && method.getName.startsWith("test")) { println(method) }} Output : public void ppt.Tests$.test2() public void ppt.Tests$.test1()
  • 22. Comparison of scala annotation with java Scala Java scala.SerialVersionUID serialVersionUID (field) scala.cloneable java.lang.Cloneable scala.deprecated java.lang.Deprecated scala.inline no equivalent scala.native native (keyword) scala.remote java.rmi.Remote scala.serializable java.io.Serializable scala.throws throws (keyword) scala.transient transient (keyword) scala.unchecked no equivalent scala.volatile volatile (keyword) scala.reflect.BeanProperty Design pattern