JavaPoet 通用参数
JavaPoet Generic Parameter
如何生成具有以下签名的方法?
public static <T extends MyClass & MyInterface> MyOtherClass someMethod(T type)
使用 TypeVariableName
along with 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);
}
}
注意 - 我的 MyClass
、MyOtherClass
和 MyInterface
都在里面一个名为 com
的包,它也是实现此 main()
的 class 所在的位置。
使用进口 -
生成输出为 --
package com;
public final class GenericImpl {
public static <T extends MyClass & MyInterface> MyOtherClass someMethod(T type) {
}
}
如何生成具有以下签名的方法?
public static <T extends MyClass & MyInterface> MyOtherClass someMethod(T type)
使用 TypeVariableName
along with 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);
}
}
注意 - 我的 MyClass
、MyOtherClass
和 MyInterface
都在里面一个名为 com
的包,它也是实现此 main()
的 class 所在的位置。
使用进口 -
生成输出为 --
package com; public final class GenericImpl { public static <T extends MyClass & MyInterface> MyOtherClass someMethod(T type) { } }