[英]How to generate a generic method with JCodeModel?
I need to generate a generic method like我需要生成一个通用方法,如
public static <T extends SomeObject> T get(Class<T> type) {
...
return null;
}
Anybody done this before?以前有人做过这个吗?
The key is the JMethod#generify
method:关键是JMethod#generify
方法:
import com.sun.codemodel.CodeWriter;
import com.sun.codemodel.JClass;
import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JExpr;
import com.sun.codemodel.JMethod;
import com.sun.codemodel.JMod;
import com.sun.codemodel.JPackage;
import com.sun.codemodel.JType;
import com.sun.codemodel.writer.SingleStreamCodeWriter;
public class CreateGenericMethodTest
{
public static void main(String[] args) throws Exception
{
JCodeModel codeModel = new JCodeModel();
JPackage jpackage = codeModel._package("com.example");
JDefinedClass jclass = jpackage._class("Example");
JType genericType = codeModel.directClass("T");
JMethod jmethod =
jclass.method(JMod.PUBLIC | JMod.STATIC, genericType, "get");
jmethod.generify("T", Number.class);
JClass parameterType = codeModel.ref(Class.class).narrow(genericType);
jmethod.param(parameterType, "type");
jmethod.body()._return(JExpr.ref("null"));
CodeWriter codeWriter = new SingleStreamCodeWriter(System.out);
codeModel.build(codeWriter);
}
}
Output:输出:
package com.example;
public class Example {
public static<T extends Number >T get(Class<T> type) {
return null;
}
}
(I used Number
as the bound, but you can choose it arbitrarily) (我用Number
作为绑定,但你可以任意选择)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.