Your SlideShare is downloading. ×
Java annotation
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Java annotation

1,569

Published on

Apresentando conceitos de Annotations em Java

Apresentando conceitos de Annotations em Java

Published in: Technology
2 Comments
5 Likes
Statistics
Notes
No Downloads
Views
Total Views
1,569
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
59
Comments
2
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. @ AnnotationsNatanael FonsecaArquiteto de Software
  • 2. ConceitoAdicionam “metadados” que não interferemdiretamente no código anotado, mas quepodem ser utilizadas posteriormente paraobter informações relevantes.Exemplo: • @Override • @SuppressWarnings
  • 3. Diferentes usos• Fornecer informações para o compilador: Anotações podem ser utilizadas pelo compilador para detectar errors ou suprimir warnings.• Compiler-time and deployment-time processing Alguns “Software tools” podem processar anotações para gerar código, gerar XML, realizar validações em campos e etc.• Processamento em Runtime Algumas anotações estão disponíveis para serem processadas em Runtime.
  • 4. Usadas pelo Compilador• @Deprecated Indica que o elemento marcado está "depreciado" e não deveria mais ser utilizado. O compilador gera um "warning" quando você utiliza um método que possui esta anotação.• @Override Informa ao compilador que o elemento está sobrescrevendo um outros elemento declarado na superclasse.• @SuppressWarnings Diz ao compilador para suprimir especificos "warnings" que poderiam ser gerados.
  • 5. Criando suas próprias anotaçõesSegue a mesma regra de criação de umainterface, mas coloca-se simbolo “@” antes dapalavra chave “interface”. Ex: public @interface MyAnnotation { }
  • 6. Algumas Regras• A declaração dos métodos não deveriam ter quaisquer parâmetros, não deveriam lançar quaisquer exceções e o tipo de retorno deve ser um dos seguintes: – Primitivos; – String; – Class; – Enum; – Array de um dos tipos acima.
  • 7. Meta-AnnotationConhecidas como Anotação de anotação eservem para definir o comportamento daanotação sendo criada, são elas: – Target – Retention – Documented – Inherited
  • 8. @TargetIndica em qual elemento da classe a anotação pode ser aplicada:• @Target(ElementType.TYPE) - Pode ser aplicado a qualquer elemento da classe;• @Target(ElementType.FIELD) - Pode ser aplicado a um campo ou propriedade;• @Target(ElementType.METHOD)- Pode ser aplicado a um método;• @Target(ElementType.PARAMETER) - Pode ser aplicado a parâmetros de um método;• @Target(ElementType.CONSTRUCTOR) - Pode ser aplicado a contrutores;• @Target(ElementType.LOCAL_VARIABLE) - Pode ser aplicado a variáveis locais;• @Target(ElementType.ANNOTATION_TYPE) - Indica que o próprio tipo declarado é um anotação de anotação;
  • 9. @RetentionIndica onde e quanto tempo as anotações destetipo serão obtidas, pode possuir três valores :• RetentionPolicy.SOURCE – Serão obtidas somente em nível de fonte e serão ignoradas pelo compilador;• RetentionPolicy.CLASS—Serão obtidas apenas em nível de compilação pelo compilador e serão ignoradas pela VM;• RetentionPolicy.RUNTIME— Obtidas pela VM e Serão lidas apenas em runtime;
  • 10. @Documented e @Inherited@Documented: Indica se a anotação pertencerá aojavadoc ou algum outro gerador de documentaçãopor padrão;@Inherited: Indica se a anotação será herdadapelas subclasses automaticamente, sendo assim,Caso haja uma consulta procurando por umaanotação qualquer, se a classe consultada nãopossuir a anotação a classe pai será consultada porpadrão.
  • 11. Exemplo @MyAnnotation em nível de Classe@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface MyAnnotation { public String name(); public String value();}
  • 12. Exemplo @MyAnnotation em nível de classe@MyAnnotation(name="Natanael Fonseca", value="Qualquer coisa")public class Pessoa { private String nome; private String telefone; public Pessoa() { }}
  • 13. Como processar @MyAnnotation em nível de classepublic static void main(String[] args) { Class aClass = Pessoa.class; Annotation[] annotations = aClass.getAnnotations(); for (Annotation annotation : annotations) { if (annotation instanceof MyAnnotation) { MyAnnotation myAnnotation = (MyAnnotation) annotation; System.out.println("name: " + myAnnotation.name()); System.out.println("value: " + myAnnotation.value()); } } }
  • 14. Exemplo @MyAnnotation em nível de campo@Retention(RetentionPolicy.RUNTIME)@Target(ElementType. FIELD)public @interface MyAnnotation { public String name(); public String value();}
  • 15. Exemplo @MyAnnotation em nível de campopublic class Pessoa { @MyAnnotation(name="Natanael Fonseca", value="Qualquer coisa") public String nome; private String telefone;}
  • 16. Como Processar @MyAnnotation em nível de Campopublic static void main(String[] args) {Class aClass = Pessoa.class; Field[] fields = aClass.getFields(); Obtém os campos públicos da classe, Sendo assim, somente campos públicos System.out.print(" Field" + fields.length ); Serão lidos desta forma. for (Field field : fields) { System.out.print(" Field" + field.getName() ); Annotation[] annotations = field.getDeclaredAnnotations(); for (Annotation annotation : annotations) { if (annotation instanceof MyAnnotation) { MyAnnotation myAnnotation = (MyAnnotation) annotation; System.out.println("name: " + myAnnotation.name()); System.out.println("value: " + myAnnotation.value()); } } }}
  • 17. Exemplo @MyAnnotation em nível de método@Retention(RetentionPolicy.RUNTIME)@Target(ElementType. METHOD)public @interface MyAnnotation { public String name(); public String value();}
  • 18. Exemplo @MyAnnotation em nível de métodopublic class Pessoa { @MyAnnotation(name="Natanael Fonseca", value="Qualquer coisa") public void exibirMsg(){ }}
  • 19. Como Processar @MyAnnotation em nível de métodopublic static void main(String[] args) {Class aClass = Pessoa.class; Method[] metodos = aClass.getMethods(); Obtém os métodos públicos da classe for (Method method : metodos) { Annotation[] annotations = method.getDeclaredAnnotations(); for (Annotation annotation : annotations) { if (annotation instanceof MyAnnotation) { MyAnnotation myAnnotation = (MyAnnotation) annotation; System.out.println("name: " + myAnnotation.name()); System.out.println("value: " + myAnnotation.value()); } } }}
  • 20. Exemplo @MyAnnotation em nível de parâmetro@Retention(RetentionPolicy.RUNTIME)@Target(ElementType. PARAMETER)public @interface MyAnnotation { public String name(); public String value();}
  • 21. Exemplo @MyAnnotation em nível de parâmetropublic class Pessoa { public String exibirPessoaConcatenandoCom( @MyAnnotation(name="Ola", value="Beleza") String palavra ){ return ""; }}
  • 22. Como Processar @MyAnnotation em nível de parâmetropublic static void main(String[] args) {Class aClass = Pessoa.class; Method[] methods = aClass.getMethods(); De cada método, obtém as anotações for (Method method : methods) { aplicadas Annotation[][] parameterAnnotations = method.getParameterAnnotations(); Class[] parameterTypes = method.getParameterTypes(); int i = 0; for (Annotation[] annotations : parameterAnnotations) { Class parameterType = parameterTypes[i++]; for (Annotation annotation : annotations) { if (annotation instanceof MyAnnotation) { MyAnnotation myAnnotation = (MyAnnotation) annotation; System.out.println("param: " + parameterType.getName()); System.out.println("name : " + myAnnotation.name()); System.out.println("value: " + myAnnotation.value()); } } } }}

×