Criar classes java (.java) dinamicamente

9 respostas
joca_java

Pessoal, alguém sabe dizer se tem como eu criar classes Java dinamicamente???
Não seria o .class e sim o .java!
O .class sei que tem como por exemplo pelo Javassist…
Alguem sabe como posso fazer pra gerar um .java?
Ou eu teria que criar um arquivo texto na mão mesmo e renomear pra .java?

Valeu!

9 Respostas

Marky.Vasconcelos

Gerar o arquivo?

File f = new File("C:/Arq.java");
	try {
		f.createNewFile();
	} catch (IOException e) {
		e.printStackTrace();
	}
joca_java

Alguma outra maneira???
Será que o CGLIB faz isso?

Marky.Vasconcelos

Ai eu já não sei, mas qual é a sua intenção?

Apenas criar o arquivo e escrever nele?

File f = new File("C:/Teste.java");
	try {
		f.createNewFile();
	} catch (IOException e) {
		e.printStackTrace();
	}
	PrintWriter pw = null;
	try {
		pw = new PrintWriter(new FileOutputStream(f));
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}
	pw.append("public class Teste {\n");
	pw.append("public static void main(String... args){\n");
	pw.append("System.out.println(\"File\");\n");
	pw.append("}\n}");
	
	pw.flush();
	pw.close();
MrDataFlex

usa o maker… kkkkkkkkkkkkkk brincadeira!

joca_java

Sim sim… queria saber se teria algo mais rápido… que criar o arquivo…
é que to querendo automatizar algumas coisas… ai preciso inserir anotações
em atributos de classes criadas sacasse? Na verdade seria editar essa classe…

kicolobo

Sugestão: ao invés de criar classes Java, utilize alguma linguagem dinâmica para Java, como por exemplo Groovy, JRuby, Rhino ou qualquer outra.

PS: só por curiosidade, por que gerar as classes Java dinâmicamente?

joca_java

kicolobo:
Sugestão: ao invés de criar classes Java, utilize alguma linguagem dinâmica para Java, como por exemplo Groovy, JRuby, Rhino ou qualquer outra.

PS: só por curiosidade, por que gerar as classes Java dinâmicamente?


Opa kicolobo, na verdade não seria nem gerar novas… desculpe a má forma de expressão… e sim alterar essas classes. Como por exemplo,
adicionar uma anotação em um atributo.
Pensei que tinha como fazer via Reflection…

marcelo_mococa

você quer adicionar funcionalidades no objeto em tempo de execução?

se for isso, porque não tenta criar um proxy do objeto?
em ultimo caso, o javaassist pode te ajudar.

rubinelli

Eu vejo algumas saídas aí.

A mais complexa é usar um parser com uma gramática Java para avaliar o seu .java e inserir as anotações que você quer. A vantagem é que você escreve um arquivo totalmente válido, que vai compilar mesmo que não passe pelo seu pré-processador, não vai aprecer com erros no seu Eclipse ou Netbeans, e você não tem que marcar com nada especial para funcionar.

A mais simples é usar um template engine. A desvantagem é que o código original não é compilável, então você perde o apoio do seu IDE.

A solução intermediária é usar uma notação que possa ser ignorada, semelhante por exemplo a Javadocs, e fazer o seu parsing com uma gramática mais simples. Provavelmente dá pra fazer só com expressões regulares, se você não quer nada avançado.

Criado 13 de fevereiro de 2008
Ultima resposta 13 de fev. de 2008
Respostas 9
Participantes 6