Criar classes java (.java) dinamicamente

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!

Gerar o arquivo?

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

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

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();

usa o maker… kkkkkkkkkkkkkk brincadeira!

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…

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?

[quote=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?[/quote]
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…

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.

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.