如何为方法的 parameterSpec 添加类型约束
How to add type constraints to parameterSpec for method
我正在努力按照标题所说的做 -- 我想生成一个类似于以下内容的方法规范:
public void doSomethingWithThis( Container<? extends ImportantInterface> argument ) {
//1. Collect UnderPants
//2. ...
//3. Profit
}
我知道我可以只使用原始类型,但生成的东西将被下游的其他人使用,并且在他们的 IDE 中弹出类型信息(就此而言我的 :/ )将使我的错误解决生活更轻松...
所以,我是一个工具箱,又花了 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())
我正在努力按照标题所说的做 -- 我想生成一个类似于以下内容的方法规范:
public void doSomethingWithThis( Container<? extends ImportantInterface> argument ) {
//1. Collect UnderPants
//2. ...
//3. Profit
}
我知道我可以只使用原始类型,但生成的东西将被下游的其他人使用,并且在他们的 IDE 中弹出类型信息(就此而言我的 :/ )将使我的错误解决生活更轻松...
所以,我是一个工具箱,又花了 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())