JavaPoet添加通用参数

时间:2015-06-21 22:32:01

标签: java code-generation javapoet

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

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()

2 个答案:

答案 0 :(得分:12)

将您生成的*x + 1提取到变量中,以便重复使用其值

#![feature(zero_one)]

use std::ops::Add;
use std::num::One;

fn inc<T: Copy + One + Add<T, Output = T>>(x: &mut T) {
    *x = *x + T::one(); 
}

fn main() {
    let mut x: i32 = 10;
    let mut y: u8 = 1;
    inc(&mut x);
    inc(&mut y);
    println!("{} {}", x, y);
}

然后添加该类型的参数

TypeVariableName

答案 1 :(得分:2)

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

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