Как добавить ограничения типа в parameterSpec для метода

Я пытаюсь сделать именно то, что говорит заголовок - я хотел бы создать спецификацию метода, которая выглядит примерно так:

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

Я понимаю, что могу просто использовать необработанный тип, но сгенерированная вещь будет использоваться другими в нисходящем потоке, и наличие информации о типе, всплывающей в их IDE (и моей в этом отношении:/), облегчит мою работу по устранению ошибок в будущем...

1 ответ

Решение

Итак, я инструментарий и еще 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())
Другие вопросы по тегам