Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaPoet Add Generic Parameter

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()
like image 284
Eliezer Avatar asked Jun 21 '15 22:06

Eliezer


2 Answers

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();
like image 143
Sotirios Delimanolis Avatar answered Nov 08 '22 05:11

Sotirios Delimanolis


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();
like image 31
Jonathan Avatar answered Nov 08 '22 06:11

Jonathan