How to create a type with a given name in JavaPoet?

1.1k Views Asked by At

In JavaPoet I need to create an instance of TypeName representing an inner class of a given name.

I have a TypeSpec.Builder classBuilder of the outer class. No idea what to do next.

Note that this inner class is present only in the generated program, not in the generating program.

2

There are 2 best solutions below

2
Jesse Wilson On

Create the class name like so:

ClassName mapEntry = ClassName.get("java.util", "Map", "Entry");

Then you use the normal syntax to create it.

  addStatement("$T instance = new $T()", mapEntry, mapEntry);
0
Evgen On

So, let's suppose that you have some TypeSpec from TypeSpec.Builder:

TypeSpec.Builder classBuilder = new TypeSpec.Builder();
TypeSpec typeSpec  = classBuilder.build();

After that tou need to create JavaFile and specify your package name for this class:

String packageName = "your.package.name";
JavaFile javaFile = JavaFile.builder(packageName, typeSpec).build();

Now, you can use this JavaFile in your other files like this (you need to use previous JavaFile as parameter) :

ClassName className = ClassName.get(javaFile.getPackageName(), javaFile.getTypeSpec().getName());
TypeSpec.Builder otherClassBuilder = new TypeSpec.Builder();
otherClassBuilder.addStatement("$T instance = new $T()", className , className );

So, you can use className as your generated class to generate other classes.