10

我将如何生成具有以下签名的方法?

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

到目前为止,我有:

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

编辑这是上面代码生成的(我不知道如何添加参数):

public <T extends Myclass> void doSomething()
4

2 回答 2

16

TypeVariableName将您生成的提取到一个变量中,以便您可以重用它的值

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

然后添加该类型的参数

MethodSpec spec = MethodSpec.methodBuilder("doSomething")
                            .addModifiers(Modifier.PUBLIC)
                            .addTypeVariable(typeVariableName)
                            .addParameter(typeVariableName, "t") // you can also add modifiers
                            .build();
于 2015-06-21T22:38:56.290 回答
3

如果要传递通用类型结构,请使用以下方式。

MethodSpec loadListInteger = MethodSpec.methodBuilder("loadListInteger")
                    .addModifiers(Modifier.PUBLIC)
                    .returns(void.class)
                    .addParameter(ParameterizedTypeName.get(List.class, Integer.class), "list")
                    .build();
于 2016-09-19T07:29:11.407 回答