3

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.

porton
  • 5,214
  • 11
  • 47
  • 95

2 Answers2

1

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);
Jesse Wilson
  • 39,078
  • 8
  • 121
  • 128
0

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.

Dharman
  • 30,962
  • 25
  • 85
  • 135
Evgen
  • 520
  • 4
  • 17