• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Introdução à Metaprogramação com Java Reflection API
 

Introdução à Metaprogramação com Java Reflection API

on

  • 2,571 views

Apresentação com o tema de "Introdução à Metaprogramação com Java Reflection API" apresentada na 11ª edição do evento É Dia de Java na Universidade Federal de São Carlos (UFSCar) em São ...

Apresentação com o tema de "Introdução à Metaprogramação com Java Reflection API" apresentada na 11ª edição do evento É Dia de Java na Universidade Federal de São Carlos (UFSCar) em São Carlos nos dias 24 e 25 de Agosto de 2012

Statistics

Views

Total Views
2,571
Views on SlideShare
2,571
Embed Views
0

Actions

Likes
2
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Introdução à Metaprogramação com Java Reflection API Introdução à Metaprogramação com Java Reflection API Presentation Transcript

    • Introdução à metaprogramação com Java Reflection API 1 G U I L H E R M E D E C L E VA FA R T O É D I A D E J AVA 2 0 1 2 UNIVERSIDADE FEDERAL DE SÃO CARLOS ( UFSCar)
    • Agenda 2 Objetivos do Minicurso Metaprogramação Programação reflexiva em Java A classe java.lang.Class A classe java.lang.reflect.Field A classe java.lang.reflect.Method A classe java.lang.reflect.Constructor Java Annotations A classe java.lang.reflect.AccessibleObject Proposta de Caso de Uso
    • Apresentação 3 Guilherme de Cleva Farto  Graduação em Bacharelado em Ciência da Computação  FEMA/IMESA – Assis/SP – (2010)  Pós-graduação em Engenharia de Componentes Java  FIO/TNT Educacional – Ourinhos, Lins/SP – (2011)  Analista e desenvolvedor de sistemas Java Web – TOTVS  Próxima (P2RX) – Software and Services  Novas tecnologias (Google Maps API e Google Android)  Automação de sistemas  Integração de sistemas corporativos (EAI)  Professor universitário do curso de Ciência da Computação  FEMA/IMESA – Assis/SP – (2012)  Google Android, Cloud Computing, Google App Engine e Arduino  Autor de diversos artigos, treinamentos e palestras sobre tecnologias Java e Google, com ênfase em XML, SOA e Web Services
    • Objetivos do Minicurso 4 Apresentar os conceitos de metaprogramação em Java por meio do uso da Reflection API Desmitificar as dificuldades ao se utilizar programação reflexiva (e recursiva) Fornecer novos (e melhores) mecanismos para auxiliar no desenvolvimento de software Apresentar exemplos práticos do uso de programação reflexiva
    • Metaprogramação 5 É a capacidade de “escrever” programas que representam ou manipulam outros programas ou a si mesmo, assim como a seus dados Vantagens  Criação de aplicativos mais dinâmicos  Redução na quantidade de código-fonte implementado  Minimização de erros  Facilidade de manutenção Desvantagens  Domínio mais avançado de lógica e programação  Exigência de um maior nível de atenção ao codificar  Dependência da linguagem ou tecnologia  Geração de código complexo
    • Programação reflexiva em Java 6 Java Reflection API  java.lang.reflect.* (contém as classes básicas)  Disponibilizada pela JDK desde a versão 1.1 Provê uma API pequena e segura que suporta introspecção sobre classes e objetos atuais na JVM Permite inspecionar e manipular classes, interfaces, atributos, métodos, entre outros, em tempo de execução Permite inspecionar e manipular metainformações  @Annotations
    • Programação reflexiva em Java 7 É possível obter:  A classe de um objeto  O pacote de uma classe  Os modificadores de acesso de uma classe  A superclasse (extends) e as interfaces (implements) de uma classe  Os atributos (características) de uma classe  Os métodos (comportamentos) de uma classe  Os construtores de uma classe  As informações e metainformações (@annotations) de classes, interfaces, atributos, métodos, entre outros, em tempo de execução  Entre outros...
    • Programação reflexiva em Java 8 É possível:  Criar uma instância de uma classe dinamicamente  Verificar se um objeto é instância de uma determinada classe  Obter (get) e modificar (set) os valores de atributos de uma instância  Invocar (executar) métodos de uma instância  Invocar construtores de uma classe  Entre outros...
    • A classe java.lang.Class 9 Utilizada para representar classes Java de maneira que seja possível obter e manipular informações dinamicamente Deve-se obter uma instância de java.lang.Class Não há construtores públicos para a classe java.lang.Class A JVM automaticamente constrói objetos de java.lang.Class quando novas classes são carregadas Embora a classe java.lang.Class devesse pertencer ao pacote java.lang.reflect, ela foi mantida em java.lang por motivos de compatibilidade
    • A classe java.lang.Class 10 Por meio de uma instância de java.lang.Class, é possível:  Verificar se o objeto Class representa um tipo de vetor (array)  Verificar se o objeto Class representa um tipo primitivo (boolean, char, byte, short, int, long, float, double e void)  Verificar qual tipo o objeto Class representa  Verificar o(s) modificador(es) de acesso do objeto Class  Refletir (introspectar) membros (Field, Method e Constructor) do tipo representado  Verificar se um objeto é instância ou implementa a interface do tipo representado  Verificar se uma classe ou interface é superclasse ou superinterface de uma dada classe ou interface
    • A classe java.lang.Class 11package java.lang;public final class Class<T> extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement { A partir de um objeto AlunoVO aluno, pode-se obter sua classe:  Class<?> klass = aluno.getClass(); É possível obter uma instância de java.lang.Class em tempo de compilação:  Class<?> klass = AlunoVO.class; É possível obter uma instância de java.lang.Class em tempo de execução:  Class<?> klass = Class.forName(“br.ufscar.dc.vo.AlunoVO”);
    • A classe java.lang.Class 12 toString public String toString()  Se a instância de java.lang.Class representar uma classe ou vetor (array), irá retornar uma String contendo a palavra "class", um espaço " ", seguido do nome totalmente qualificado da classe  Se a instância de java.lang.Class representar uma interface, irá retornar uma String contendo a palavra "interface", um espaço " ", seguido do nome totalmente qualificado da interface  Se a instância de java.lang.Class representar um tipo primitivo, irá retornar uma String contendo o nome do tipo primitivo  Se a instância de java.lang.Class representar o tipo void, irá retornar uma String contendo a palavra "void"
    • A classe java.lang.Class 13 forName public static Class forName(String className) throws ClassNotFoundException  Dado um nome totalmente qualificado para uma classe Java, este método tenta localizá-la e carregá-la  Se o método for executado com sucesso, irá retornar uma instância de java.lang.Class representando a classe informada  Se o método falhar, irá lançar a exceção ClassNotFoundException (classe não encontrada)  Instâncias de classes de tipos primitivos ou void não podem ser obtidas por meio desse método
    • A classe java.lang.Class 14 newInstance public Object newInstance() throws InstantiationException, IllegalAccessException  Cria e inicializa uma nova instância da classe representada pelo objeto de java.lang.Class (responsável pela invocação)  Este método é dinamicamente equivalente à instanciação pelo construtor padrão (lista vazia de parâmetros)  Se o método for executado com sucesso, irá retornar um objeto criado e iniciado da classe utilizada na invocação  O método irá lançar a exceção IllegalAccessException se a classe ou o inicializador não for acessível  O método irá lançar a exceção InstantiationException se a classe for abstrata ou se for uma interface, assim como na tentativa de instanciar um objeto do tipo primitivo ou void
    • A classe java.lang.Class 15 isInstance public boolean isInstance(Object obj)  Este método é dinamicamente equivalente ao operador "instanceof"  O método irá retornar "true" se o objeto passado como parâmetro for diferente de "null" e puder ser convertido (cast) para um tipo de referência da instância java.lang.Class responsável pela invocação. Caso contrário, o método irá retornar "false". O método também irá retornar "false" se a instância de java.lang.Class for do tipo primitivo ou void  Se o método falhar, irá lançar a exceção ClassCastException (erro ao realizar cast)
    • A classe java.lang.Class 16 isInterface public boolean isInterface()  Se a instância de java.lang.Class representar uma interface, irá retornar "true"; caso contrário, irá retornar "false" isArray public boolean isArray()  Se a instância de java.lang.Class representar um tipo de vetor (array), irá retornar "true"; caso contrário, irá retornar "false"
    • A classe java.lang.Class 17 isPrimitive public boolean isPrimitive()  Se a instância de java.lang.Class representar um tipo primitivo, irá retornar "true"; caso contrário, irá retornar "false"  Há nove tipos primitivos pré-definidos:  java.lang.Boolean.TYPE  java.lang.Character.TYPE  java.lang.Byte.TYPE  java.lang.Short.TYPE  java.lang.Integer.TYPE  java.lang.Long.TYPE  java.lang.Float.TYPE  java.lang.Double.TYPE  java.lang.Void.TYPE
    • A classe java.lang.Class 18 getName public String getName()  Retorna uma String contendo o nome totalmente qualificado da classe (declarada ou vetor), interface, tipo primitivo ou void getSimpleName public String getSimpleName()  Retorna uma String contendo o nome simplificado da classe (declarada ou vetor), interface, tipo primitivo ou void getPackage public Package getPackage()  Retorna uma instância de java.lang.Package contendo o pacote (package) da classe (declarada ou vetor), interface ou tipo primitivo
    • A classe java.lang.Class 19 getModifiers public int getModifiers()  Retorna um inteiro (int) representando o(s) modificador(es) de acesso da classe ou interface  Os modificadores de acesso são constantes para "public", "protected", "private", "final", "interface“ e demais  Pode-se utilizar a instrução "Modifier.toString(int)" para recuperar uma String contendo o(s) modificador(es) de acesso conforme valor informado getSuperclass public Class getSuperclass()  Se a instância de java.lang.Class estender (ou herdar) de outra classe, irá retornar uma nova instância de java.lang.Class representando a superclasse.  O método irá retornar "null" se a instância de java.lang.Class representar a classe Object ou se representar uma interface ou tipo primitivo.
    • A classe java.lang.Class 20 getInterfaces public Class[] getInterfaces()  Método utilizado por retornar um vetor (array) de instâncias de java.lang.Class contendo todas as interfaces representadas pela instância de java.lang.Class responsável pela invocação  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.Class não implementar nenhuma interface getDeclaringClass public Class getDeclaringClass()  Método responsável por recuperar uma instância de java.lang.Class da classe ao qual a responsável pela invocação pertence  O método irá retornar "null" se a classe ou interface não é membro de nenhuma outra classe
    • A classe java.lang.Class 21 getFields public Field[] getFields() throws SecurityException  Método responsável por recuperar um vetor (array) de instâncias de java.lang.reflect.Field contendo todos os atributos públicos da instância de java.lang.Class responsável pela invocação  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.Class não possuir nenhum atributo público acessível  O método irá lançar a exceção SecurityException se o acesso às informações dos atributos for negado
    • A classe java.lang.Class 22 getDeclaredFields public Field[] getDeclaredFields() throws SecurityException  Método responsável por recuperar um vetor (array) de instâncias de java.lang.reflect.Field contendo todos os atributos, independente do(s) modificador(es) de acesso, da instância de java.lang.Class responsável pela invocação  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.Class não possuir nenhum atributo ou se ela representar um tipo primitivo  O método irá lançar a exceção SecurityException se o acesso às informações dos atributos for negado
    • A classe java.lang.Class 23 getField public Field getField(String name) throws NoSuchFieldException, SecurityException  Método responsável por recuperar uma instância de java.lang.reflect.Field contendo o atributo público da instância de java.lang.Class responsável pela invocação a partir do nome passado como parâmetro  O método irá lançar a exceção NoSuchFieldException se o atributo não existir  O método irá lançar a exceção SecurityException se o acesso às informações do atributo for negado
    • A classe java.lang.Class 24 getDeclaredField public Field getDeclaredField(String name) throws NoSuchFieldException, SecurityException  Método responsável por recuperar uma instância de java.lang.reflect.Field contendo o atributo, independente do(s) modificador(es) de acesso, da instância de java.lang.Class responsável pela invocação a partir do nome passado como parâmetro  O método irá lançar a exceção NoSuchFieldException se o atributo não existir  O método irá lançar a exceção SecurityException se o acesso às informações do atributo for negado
    • A classe java.lang.Class 25 getMethods public Method[] getMethods() throws SecurityException  Método responsável por recuperar um vetor (array) de instâncias de java.lang.reflect.Method contendo todos os métodos públicos da instância de java.lang.Class responsável pela invocação  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.Class não possuir nenhum método público  O método irá lançar a exceção SecurityException se o acesso às informações dos métodos for negado
    • A classe java.lang.Class 26 getDeclaredMethods public Method[] getDeclaredMethods() throws SecurityException  Método responsável por recuperar um vetor (array) de instâncias de java.lang.reflect.Method contendo todos os métodos, independente do(s) modificador(es) de acesso, da instância de java.lang.Class responsável pela invocação  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.Class não possuir nenhum método ou se ela representar um tipo primitivo  O método irá lançar a exceção SecurityException se o acesso às informações dos métodos for negado
    • A classe java.lang.Class 27 getMethod public Method getMethod(String name, Class[] parameterTypes) throws NoSuchMethodException, SecurityException  Método responsável por recuperar uma instância de java.lang.reflect.Method contendo o método público da instância de java.lang.Class responsável pela invocação a partir do nome e da lista (vetor de java.lang.Class) de tipos de parâmetros (em ordem) passados como parâmetros  O método irá lançar a exceção NoSuchMethodException se o método não existir  O método irá lançar a exceção SecurityException se o acesso às informações do método for negado
    • A classe java.lang.Class 28 getDeclaredMethod public Method getDeclaredMethod(String name, Class[] parameterTypes) throws NoSuchMethodException, SecurityException  Método responsável por recuperar uma instância de java.lang.reflect.Method contendo o método, independente do(s) modificador(es) de acesso, da instância de java.lang.Class responsável pela invocação a partir do nome e da lista (vetor de java.lang.Class) de tipos de parâmetros (em ordem) passados como parâmetros  O método irá lançar a exceção NoSuchMethodException se o método não existir  O método irá lançar a exceção SecurityException se o acesso às informações do método for negado
    • A classe java.lang.Class 29 getConstructors public Constructor[] getConstructors() throws SecurityException  Método responsável por recuperar um vetor (array) de instâncias de java.lang.reflect.Constructor contendo todos os construtores públicos da instância de java.lang.Class responsável pela invocação  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.Class não possuir nenhum construtor público ou se ela representar um tipo primitivo  O método irá lançar a exceção SecurityException se o acesso às informações dos construtores for negado
    • A classe java.lang.Class 30 getDeclaredConstructors public Constructor[] getDeclaredConstructors() throws SecurityException  Método responsável por recuperar um vetor (array) de instâncias de java.lang.reflect.Constructor contendo todos os construtores, independente do(s) modificador(es) de acesso, da instância de java.lang.Class responsável pela invocação  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.Class não possuir nenhum construtor ou se ela representar um tipo primitivo  O método irá lançar a exceção SecurityException se o acesso às informações dos construtores for negado
    • A classe java.lang.Class 31 getConstructor public Constructor getConstructor(Class[] parameterTypes) throws NoSuchMethodException, SecurityException  Método responsável por recuperar uma instância de java.lang.reflect.Constructor contendo o construtor público da instância de java.lang.Class responsável pela invocação a partir da lista (vetor de java.lang.Class) de tipos de parâmetros (em ordem) passada como parâmetro  O método irá lançar a exceção NoSuchMethodException se o construtor não existir  O método irá lançar a exceção SecurityException se o acesso às informações do construtor for negado
    • A classe java.lang.Class 32 getDeclaredConstructor public Constructor getDeclaredConstructor(Class[] parameterTypes) throws NoSuchMethodException, SecurityException  Método responsável por recuperar uma instância de java.lang.reflect.Constructor contendo o construtor, independente do(s) modificador(es) de acesso, da instância de java.lang.Class responsável pela invocação a partir da lista (vetor de java.lang.Class) de tipos de parâmetros (em ordem) passada como parâmetro  O método irá lançar a exceção NoSuchMethodException se o construtor não existir  O método irá lançar a exceção SecurityException se o acesso às informações do construtor for negado
    • A classe java.lang.reflect.Field 33 Provê acesso às informações de um atributo de uma classe ou interface O atributo refletido (ou introspectado) deve ser uma variável de classe (campo estático) ou de instância Apenas a JVM deve criar instâncias de java.lang.reflect.Field  Código reflexivo deve obter referências por meio dos métodos getField, getFields, getDeclaredField e getDeclaredFields de uma instância de java.lang.Class Permite conversão de ampliação (widening cast) durante operações de recuperação (get) e atribuição (set)  Irá lançar a exceção IllegalArgumentException se uma conversão de redução (narrowing cast) ocorrer
    • A classe java.lang.reflect.Field 34package java.lang.reflect;public final class Field extends AccessibleObject implements Member { getDeclaringClass public Class getDeclaringClass()  Método responsável por recuperar uma instância de java.lang.Class da classe ou interface que declara o atributo representado pela instância de java.lang.reflect.Field getName public String getName()  Método responsável por recuperar uma String contendo o nome do atributo representado pela instância de java.lang.reflect.Field
    • A classe java.lang.reflect.Field 35 getModifiers public int getModifiers()  Retorna um inteiro (int) representando o(s) modificador(es) de acesso da classe ou interface  Pode-se utilizar a instrução "Modifier.toString(int)" para recuperar uma String contendo o(s) modificador(es) de acesso conforme valor informado setAccessible public void setAccessible(boolean flag) throws SecurityException  Método responsável por fornecer permissão de acesso de leitura (get) e gravação (set) à instância de java.lang.reflect.Field
    • A classe java.lang.reflect.Field 36 getType public Class getType()  Método responsável por retornar uma instância de java.lang.Class indicando o tipo do atributo representado pela instância de java.lang.reflect.Field equals public boolean equals(Object obj)  Método responsável por verificar se dois atributos representados por instâncias de java.lang.reflect.Field são iguais. O método irá retornar "true" se as instâncias forem iguais; caso contrário, irá retornar "false"  Os atributos são iguais se eles possuirem a mesma classe declarante e o mesmo nome
    • A classe java.lang.reflect.Field 37 get public Object get(Object obj) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por recuperar uma instância de Object com o valor contido na instância de java.lang.reflect.Field (responsável pela invocação)  O valor é automaticamente transformado (wrapped) se o objeto for do tipo primitivo  O método irá lançar a exceção NullPointerException se o objeto passado como parâmetro for igual a "null"  O método irá lançar a exceção IllegalArgumentException se o objeto passado como parâmetro não pertencer ao tipo do atributo representado pela instância de java.lang.reflect.Field  O método irá lançar a exceção IllegalAccessException se o atributo representado pela instância de java.lang.reflect.Field não for acessível
    • A classe java.lang.reflect.Field 38 getBoolean public boolean getBoolean(Object obj) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por recuperar uma instância de boolean com o valor contido na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo boolean
    • A classe java.lang.reflect.Field 39 getByte public byte getByte(Object obj) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por recuperar uma instância de byte com o valor contido na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo byte
    • A classe java.lang.reflect.Field 40 getChar public char getChar(Object obj) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por recuperar uma instância de char com o valor contido na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo char
    • A classe java.lang.reflect.Field 41 getShort public short getShort(Object obj) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por recuperar uma instância de short com o valor contido na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo short
    • A classe java.lang.reflect.Field 42 getInt public int getInt(Object obj) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por recuperar uma instância de int com o valor contido na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo int
    • A classe java.lang.reflect.Field 43 getLong public long getLong(Object obj) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por recuperar uma instância de long com o valor contido na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo long
    • A classe java.lang.reflect.Field 44 getFloat public float getFloat(Object obj) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por recuperar uma instância de float com o valor contido na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo float
    • A classe java.lang.reflect.Field 45 getDouble public double getDouble(Object obj) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por recuperar uma instância de double com o valor contido na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo double
    • A classe java.lang.reflect.Field 46 set public void set(Object obj, Object value) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por atribuir uma instância de Object na instância de java.lang.reflect.Field (responsável pela invocação)  O valor é automaticamente transformado (wrapped) se o objeto for do tipo primitivo  O método irá lançar a exceção NullPointerException se o objeto passado como parâmetro for igual a "null"  O método irá lançar a exceção IllegalArgumentException se o objeto passado como parâmetro não pertencer ao tipo do atributo representado pela instância de java.lang.reflect.Field  O método irá lançar a exceção IllegalAccessException se o atributo representado pela instância de java.lang.reflect.Field não for acessível ou se possuir o modificador de acesso "final"
    • A classe java.lang.reflect.Field 47 setBoolean public void setBoolean(Object obj, boolean z) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por atribuir um valor de boolean na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo boolean
    • A classe java.lang.reflect.Field 48 setByte public void setByte(Object obj, byte b) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por atribuir um valor de byte na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo byte
    • A classe java.lang.reflect.Field 49 setChar public void setChar(Object obj, char c) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por atribuir um valor de char na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo char
    • A classe java.lang.reflect.Field 50 setShort public void setShort(Object obj, short s) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por atribuir um valor de short na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo short
    • A classe java.lang.reflect.Field 51 setInt public void setInt(Object obj, int i) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por atribuir um valor de int na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo int
    • A classe java.lang.reflect.Field 52 setLong public void setLong(Object obj, long l) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por atribuir um valor de long na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo long
    • A classe java.lang.reflect.Field 53 setFloat public void setFloat(Object obj, float f) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por atribuir um valor de float na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo float
    • A classe java.lang.reflect.Field 54 setDouble public void setDouble(Object obj, double d) throws NullPointerException, IllegalArgumentException, IllegalAccessException  Método responsável por atribuir um valor de double na instância de java.lang.reflect.Field (responsável pela invocação)  O método irá lançar a exceção IllegalArgumentException se o atributo representado pela instância de java.lang.reflect.Field não for do tipo double
    • A classe java.lang.reflect.Method 55 Provê acesso às informações de um método de uma classe ou interface O método refletido (ou introspectado) deve ser um método abstrato, um método de classe (método estático) ou de instância Apenas a JVM deve criar instâncias de java.lang.reflect.Method  Código reflexivo deve obter referências por meio dos métodos getMethod, getMethods, getDeclaredMethod e getDeclaredMethods de uma instância de java.lang.Class Permite conversão de ampliação (widening cast) nos parâmetros de invocação do método  Irá lançar a exceção IllegalArgumentException se uma conversão de redução (narrowing cast) ocorrer
    • A classe java.lang.reflect.Method 56package java.lang.reflect;public final class Method extends AccessibleObject implements GenericDeclaration, Member { getDeclaringClass public Class getDeclaringClass()  Método responsável por recuperar uma instância de java.lang.Class da classe ou interface que declara o método representado pela instância de java.lang.reflect.Method getName public String getName()  Método responsável por recuperar uma String contendo o nome do método representado pela instância de java.lang.reflect.Method
    • A classe java.lang.reflect.Method 57 getModifiers public int getModifiers()  Retorna um inteiro (int) representando o(s) modificador(es) de acesso da classe ou interface  Pode-se utilizar a instrução "Modifier.toString(int)" para recuperar uma String contendo o(s) modificador(es) de acesso conforme valor informado getReturnType public Class getReturnType()  Método responsável por recuperar uma instância de java.lang.Class representando o tipo de retorno do método
    • A classe java.lang.reflect.Method 58 getParameterTypes public Class[] getParameterTypes()  Método responsável por recuperar um vetor (array) de instâncias de java.lang.Class representando os tipos de parâmetros, na ordem de declaração, do método representando pela instância de java.lang.reflect.Method  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.reflect.Method não possuir nenhum parâmetro
    • A classe java.lang.reflect.Method 59 getExceptionTypes public Class[] getExceptionTypes()  Método responsável por recuperar um vetor (array) de instâncias de java.lang.Class representando os tipos de exceções do método representando pela instância de java.lang.reflect.Method  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.reflect.Method não possuir nenhuma exceção
    • A classe java.lang.reflect.Method 60 equals public boolean equals(Object obj)  Método responsável por verificar se dois métodos representados por instâncias de java.lang.reflect.Method são iguais. O método irá retornar "true" se as instâncias forem iguais; caso contrário, irá retornar "false"  Os métodos são iguais se eles possuirem a mesma classe declarante, o mesmo nome e o(s) mesmo(s) tipo(s) de parâmetro(s)
    • A classe java.lang.reflect.Method 61 invoke public Object invoke(Object obj, Object[] args) throws NullPointerException, IllegalArgumentException, IllegalAccessException, InvocationTargetException  Método responsável por invocar um método representado pela instância de java.lang.reflect.Method no objeto passado como parâmetro, utilizando-se a lista de parâmetros informada. O valor de retorno do método será retornado após a execução  O valor retornado pelo método é automaticamente transformado (wrapped) se o objeto for do tipo primitivo  O método irá lançar a exceção NullPointerException se o objeto passado como parâmetro for igual a "null"  O método irá lançar a exceção IllegalArgumentException se a lista de parâmetros não possuir os mesmos tipos da lista de parâmetros do método ou se o número de parâmetros for diferente da quantidade de parâmetros requeridos pelo método  Caso o método representado pela instância de java.lang.reflect.Method não possuir parâmetros, deverá ser passado um vetor (array) vazio (0 elementos) ou "null"
    • A classe java.lang.reflect.Constructor 62 Provê acesso às informações de um construtor de uma classe Uma instância de java.lang.reflect.Constructor deve ser utilizada para criar e inicializar uma nova instância de uma classe que declara o construtor refletido (ou introspectado), desde que a classe possa ser instanciada Apenas a JVM deve criar instâncias de java.lang.reflect.Method  Código reflexivo deve obter referências por meio dos métodos getConstructor, getConstructors, getDeclaredConstructor e getDeclaredConstructors de uma instância de java.lang.Class Uma instância de java.lang.reflect.Constructor permite conversão de ampliação (widening cast) nos parâmetros de invocação do construtor  Irá lançar a exceção IllegalArgumentException se uma conversão de redução (narrowing cast) ocorrer
    • A classe java.lang.reflect.Constructor 63package java.lang.reflect;public final class Constructor<T> extends AccessibleObject implements GenericDeclaration, Member {  getDeclaringClass  public Class getDeclaringClass()  Método responsável por recuperar uma instância de java.lang.Class da classe que declara o construtor representado pela instância de java.lang.reflect.Constructor  getName  public String getName()  Método responsável por recuperar uma String contendo o nome do construtor representado pela instância de java.lang.reflect.Constructor
    • A classe java.lang.reflect.Constructor 64 getModifiers public int getModifiers()  Retorna um inteiro (int) representando o(s) modificador(es) de acesso da classe ou interface  Pode-se utilizar a instrução "Modifier.toString(int)" para recuperar uma String contendo o(s) modificador(es) de acesso conforme valor informado getParameterTypes public Class[] getParameterTypes()  Método responsável por recuperar um vetor (array) de instâncias de java.lang.Class representando os tipos de parâmetros, na ordem de declaração, do construtor representando pela instância de java.lang.reflect.Constructor  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.reflect.Constructor não possuir nenhum parâmetro
    • A classe java.lang.reflect.Constructor 65 getExceptionTypes public Class[] getExceptionTypes()  Método responsável por recuperar um vetor (array) de instâncias de java.lang.Class representando os tipos de exceções do método representando pela instância de java.lang.reflect.Constructor  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.reflect.Constructor não possuir nenhuma exceção
    • A classe java.lang.reflect.Constructor 66 equals public boolean equals(Object obj)  Método responsável por verificar se dois construtores representados por instâncias de java.lang.reflect.Constructor são iguais. O método irá retornar "true" se as instâncias forem iguais; caso contrário, irá retornar "false"  Os construtores são iguais se eles possuirem a mesma classe declarante e o(s) mesmo(s) tipo(s) de parâmetro(s)
    • A classe java.lang.reflect.Constructor 67 newInstance public Object newInstance(Object initargs[]) throws InstantiationException, IllegalArgumentException, IllegalAccessException, InvocationTargetException  Cria e inicializa uma nova instância da classe por meio da instância de java.lang.reflect.Constructor, a partir da lista de parâmetros informada  Se o método for executado com sucesso, irá retornar um objeto criado e iniciado da classe declarante do construtor utilizado na invocação  O método irá lançar a exceção IllegalAccessException se a classe ou o inicializador não é acessível por meio do objeto java.lang.Class  O método irá lançar a exceção InstantiationException se a classe for abstrata ou for uma interface, assim como na tentativa de instanciar um objeto do tipo primitivo ou void
    • Java Annotations 68 Disponibilizada pela JDK desde a versão 1.5 Metadados que podem ser acoplados a vários elementos de codificação para posterior recuperação  Recuperados em tempo de compilação (compile-time) ou execução (runtime)  Exemplos: classes, interfaces, atributos, métodos, construtores, entre outros... Proveem informações adicionais ao código  Podem ser utilizadas por ferramentas e/ou frameworks  Exemplo: controlar o modo de execução de um compilador ou configurar uma aplicação em tempo de execução
    • Java Annotations 69package br.ufscar.dc.annotation;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.RUNTIME)public @interface NumberValidator { Class<?> tipo(); // int - long - float - double double valorMinimo() default 0d; double valorMaximo() default 100d; boolean isObrigatorio();}
    • A classe java.lang.reflect.AccessibleObject 70 isAnnotationPresent public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)  Método responsável por verificar a existência de uma anotação a partir da instância de java.lang.Class informada  O método irá retornar "true" se a anotação existir; caso contrário, irá retornar "false“
    • A classe java.lang.reflect.AccessibleObject 71 getAnnotation public <T extends Annotation> T getAnnotation(Class<T> annotationClass)  Método responsável por recuperar uma instância de java.lang.annotation.Annotation contendo a anotação da instância de java.lang.Class informada  O método irá retornar "null" se a anotação não existir no membro (classe, interface, atributo, método, construtor, entre outros...)
    • A classe java.lang.reflect.AccessibleObject 72 getDeclaredAnnotations public Annotation[] getDeclaredAnnotations()  Método responsável por recuperar um vetor (array) de instâncias de java.lang.annotation.Annotation contendo todas as anotações da instância de java.lang.Class responsável pela invocação  O método irá retornar um vetor (array) de tamanho 0 se a instância de java.lang.Class não possuir nenhuma anotação
    • Proposta de Caso de Uso 73 Criar um mecanismo de transformação (marshall) de Java Objects para XML Exemplo:  AlunoVO guilherme = new AlunoVO(123, “Guilherme”);  CursoVO...  DisciplinaVO...  <aluno>  <ra>123</ra>  <nome><![CDATA[Guilherme]]></nome>  </aluno>
    • Proposta de Caso de Uso 74
    • Dúvidas ? 75 G U I L H E R M E D E C L E VA FA R T Oguilherme_computacao@yahoo.com.br guilherme.farto@gmail.com @gcleva h t t p : / / w w w. f e m a . e d u . b r /