0

我正在尝试完全按照标题所说的去做——我想生成一个看起来像这样的方法规范:

public void doSomethingWithThis( Container<? extends ImportantInterface> argument ) {
 //1. Collect UnderPants
 //2. ...
 //3. Profit
}

我知道我可以只使用原始类型,但生成的东西将被下游的其他人使用,并且在他们的 IDE 中弹出类型信息(以及我的 IDE :/)将使我的错误解决生活更轻松...

4

1 回答 1

0

所以,我是一个工具箱,又花了 7 分钟的时间挖掘找到了答案。评论中的问题指向正确的方向,尽管它使用的是 ParameterizedTypeName.create() 现在是 ParameterizedTypeName.get()

用于示例目的的代码,因为其他人可能会发现这很有用。

ClassName containerClassName = ClassName.get(Container.class);
TypeName wildcardTypeName = WildcardTypeName.subtypeOf(ImportantInterface.class);
ParameterizedTypeName parameterTypeName = ParameterizedTypeName.get(containerClassName, wildcardTypeName);

classBuilder.addMethod(MethodSpec.constructorBuilder()
        .addModifiers(Modifier.PUBLIC)
        .addParameter(parameterTypeName, "cargo")
        .addStatement(CodeBlock.builder()
                .addStatement("//1. Collect Underpants")
                .addStatement("//2. ...")
                .addStatement("//3. Profit!!!")
                .build())
于 2018-03-05T09:54:03.763 回答