JavaPoet Add Generic Parameter

5k views Asked by At

How would I generate a method with the following signature?

public <T extends MyClass> void doSomething(T t)

So far I have:

MethodSpec.methodBuilder("doSomething")
        .addModifiers(Modifier.PUBLIC)
        .addTypeVariable(TypeVariableName.get("T", MyClass.class))
        .build()

EDIT This is what the above code is generating (I don't know how to add the parameter):

public <T extends Myclass> void doSomething()
2

There are 2 answers

0
Sotirios Delimanolis On BEST ANSWER

Extract the TypeVariableName you generate into a variable so you can reuse its value

TypeVariableName typeVariableName = TypeVariableName.get("T", MyClass.class);

Then add a parameter of that type

MethodSpec spec = MethodSpec.methodBuilder("doSomething")
                            .addModifiers(Modifier.PUBLIC)
                            .addTypeVariable(typeVariableName)
                            .addParameter(typeVariableName, "t") // you can also add modifiers
                            .build();
0
Jonathan On

If you want to pass a Generic typed structure, use the follow way.

MethodSpec loadListInteger = MethodSpec.methodBuilder("loadListInteger")
                    .addModifiers(Modifier.PUBLIC)
                    .returns(void.class)
                    .addParameter(ParameterizedTypeName.get(List.class, Integer.class), "list")
                    .build();