Mirror DSL 1.2

A equipe de desenvolvimento do projeto Mirror está muito orgulhosa em anunciar o primeiro release publico do projeto.

Mirror é uma simples camada sobre a Java Reflection API para torná-la mais simples de utilizar.

Da versão 1.0 até este ponto a DSL estava sofrendo muitas mudanças, por isso decidimos não publicá-la.

O site oficial é http://projetos.vidageek.net/mirror/ (em inglês).

Críticas e sugestões são muito bem vindas.

Equipe de Desenvolvimento do Mirror.

Parabéns pelo projeto; sensacional!

Não acompanhei o desenvolvimento, mas como trabalho com toda a equipe aqui na Caelum, conheço o trabalho de todos: Jonas Abreu, Adriano Almeida e Diego Feitosa.

Desta equipe excelente só poderia sair algo assim bem legal!

hAHhahaha curti o “You don’t even know it’s a tutorial” Tutorial.

Putz mão na roda…

Parabéns pelo projeto

Cool
Isso apareceu em boa hora.
Estou desenvolvendo um mini framework de persistencia que preciso de reflection. fiz umas classes meia boca.

Isso vai me servir muito bem.

Valew

Edit:
Onde posso postar sugestões?
Ja tenho uma lista de coisas que seriam uteis.

Muito bom. A flexibilidade do código certamente é maior do que o código procedural, além de mais simples de usar do que a própria API de Reflection nua e crua.

No entanto, esse ‘syntatic sugar’ torna-se mais verboso. Cabe ai a analisar os trade-offs e ver se vale mesmo a pena entrar no purismo do OO ou simplesmente criar um código procedual totalmente straight forward (direto/objetivo).

Aproveitando o assunto, gostaria de tirar uma dúvida, é uma dificuldade que tambem tenho na API de Reflection.

Tem como chamar o metodo liga da classe carro sem ter que instancia o obj carro dentro da classe teste, poderia até instaciar mas pegando esse carro por uma variavel String?
Carro obj = new Carro();

Gostaria de passar esse “Carro” atravez de uma variavel String como paramentro de um metodo…

Teste

import net.vidageek.mirror.Mirror;

public class Teste {

	public static void main(String[] args) {
		
		Carro obj = new Carro();
		Mirror.on(obj).invoke().method("liga").withoutArgs();
			
	}

}

Carro

public class Carro {

	public void liga() {
		System.out.println("Ligado");
	}

}

No caso que você passou agora, nem faz sentido fazer isso. A menos talvez que você queria invocar um metodo estatico

Se voce quer invocar um metodo estatico, no reflection mesmo voce usa algo como:

Method seno = Math.class.getMethod(“sin”);
seno.invoke(null,new Double(1.123));

Tem sim:

Algum motivo especial pra invoke() e set() não poderem receber direto o nome do método/campo?

Tem sim:

Valew Daniel! Resolveu, era isso mesmo que eu precisava.

Mikhas, esse exemplo é um material de estudo, não faz sentido mesmo mas é o que encontrei pra tentar explicar minha dúvida.
Não conhecia esse “newInstance();”. Valew.

Olá Maniezo,

com o Mirror, o código ficaria mais ou menos assim:

Object carro = Mirror.on(“pacote.Carro”).invoke().constructor().withoutArgs();
Mirror.on(carro).invoke().method(“liga”).withoutArgs();

Mauricio,

o invoke() não recebe direto o nome porque ele pode ser usado para instanciar um objeto (como no exemplo acima) e o set() para manter o padrão.

Até!

[quote=jonasabreu]Olá Maniezo,

com o Mirror, o código ficaria mais ou menos assim:

Object carro = Mirror.on(“pacote.Carro”).invoke().constructor().withoutArgs();
Mirror.on(carro).invoke().method(“liga”).withoutArgs();

Mauricio,

o invoke() não recebe direto o nome porque ele pode ser usado para instanciar um objeto (como no exemplo acima) e o set() para manter o padrão.

Até![/quote]

Bacana, valew!

Opa Jonas,

O código fonte tá aonde?

Então o “invoke()” e o “set()” não poderiam ser abolidos?

Olá Mauricio,

por um erro acabei esquecendo de colocar no site (vou corrigir isso o mais rápido possível).

O source está em http://svn.vidageek.net/mirror .

Até!

Eu acho que um invoke e set que já recebem o campo/método como parâmetro são o ideal. No caso de construtor eu acho que seria mais simples ter um método “create” que já receberia os parâmetros do contrutor.

Um dos focos era deixar o código bem legível (por isso uma DSL). Portanto, abolindo os dois ficaria bem menos legivel.

Até!

Quase um pseudo-código… hehehehe… Só não vamos falar de mnemônicos… kkkkk

Repetindo a pergunta, onde está o código fonte?

E eu tinha pensado em algo assim:

Object o = Mirror.on("some.Class").create( "A String" );
Mirror.on(o).invoke( "aMethod" ).with( 13);
Mirror.on(o).get("color");

Acho bem mais intuitivo e menos burocrático :slight_smile:

[quote=jonasabreu]Olá Mauricio,

por um erro acabei esquecendo de colocar no site (vou corrigir isso o mais rápido possível).

O source está em http://svn.vidageek.net/mirror .

Até![/quote]