JavaPoet 通用参数

标签 java code-generation annotation-processing javapoet

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

public static <T extends MyClass & MyInterface> MyOtherClass someMethod(T type)

最佳答案

使用 TypeVariableName以及addTypeVariable可能会有所帮助 -

import com.squareup.javapoet.*;
import javax.lang.model.element.Modifier;
import java.io.IOException;

public class AttemptGeneric {

  public static void main(String[] args) throws IOException {

    ClassName myClass = ClassName.get("com", "MyClass");
    ClassName myOtherClass = ClassName.get("com", "MyOtherClass");
    ClassName myInterface = ClassName.get("com", "MyInterface");
    TypeVariableName typeVariableName = TypeVariableName.get("T", myClass);

    MethodSpec methodSpec = MethodSpec.methodBuilder("someMethod")
            .returns(myOtherClass)
            .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
            .addTypeVariable(typeVariableName.withBounds(myInterface))
            .addParameter(typeVariableName,"type")
            .build();


    TypeSpec genericClass = TypeSpec.classBuilder("GenericImpl")
            .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
            .addMethod(methodSpec)
            .build();

    JavaFile javaFile = JavaFile.builder("com", genericClass)
            .build();

    javaFile.writeTo(System.out);

  }
}

注意 - 我的 MyClassMyOtherClassMyInterface 全部都有在名为 com 的包中,实现此 main() 的类也驻留在该包中。

使用进口 -

<小时/>

生成输出为--

package com;

public final class GenericImpl {
  public static <T extends MyClass & MyInterface> MyOtherClass someMethod(T type) {
  }
}

关于JavaPoet 通用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41916359/

相关文章:

java - 如何在注释处理器中获取注释参数

java - Android: Activity 等待 boolean 条件

java - 静态方法总是加载到内存中吗?

java - 如何从不同的注释执行具有相同名称的方法

.net - 在 .NET 4.5 中动态生成代码的最简单方法是什么?

java - 有没有办法为Spring生成applicationContext.xml?

Java 注释处理器检查是否完全重建

java - 如何获取 ActiveMQ - 单个发送方和接收方的 FIFO 要求?

Java - 无法解析的日期,需要格式匹配 "GMT-0400"

c - 有多少单词使 memcpy 值得?