REFLECTION Permite criar chamadas em tempo de execução, sem precisar conhecer as classes e objetos envolvidos quando escrevemos nosso código (tempo de compilação). Esse dinamismo é necessário para resolvermos determinadas tarefas que nosso programa só descobre serem necessárias ao receber dados, em tempo de execução. Deixa o código-fonte mais geral. REFLECTION Algumas possibilidades utilizando reflection: Listartodos os atributos de uma classe e pegar seus valores em um objeto; Instanciar classes cujo nome só vamos conhecer em tempo de execução; Invocar métodos dinamicamente baseado no nome do método como String; Descobrir se determinados pedaços do código têm annotations. EXEMPLO Listar: Class<Negocio> classe = Negocio.class; for (Field atributo : classe.getDeclaredFields()){ System.out.println(atributo.getName()); } for (Method metodo : classe.getDeclaredMethods()) { System.out.println(metodo.getName()); } Chamar Método: metodo.invoke(objeto, argumentos); EXERCÍCIO Crie uma classe chamada Computador com os seguintes atributos e métodos: private id public processador public memória getId() : Integer; setId(Integer id); trocarProcessador(String novo); mostrarDados(); ligar(); Apresentar no console: Na classe de execução liste todos os métodos e atributos públicos presentes nela. Na classe de execução execute todos os métodos presentes nela.