繁体   English   中英

如何使用 JCodeModel 生成泛型方法?

[英]How to generate a generic method with JCodeModel?

我需要生成一个通用方法,如

public static <T extends SomeObject> T get(Class<T> type) {
    ...
    return null;
}

以前有人做过这个吗?

关键是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);
    }
}

输出:

package com.example;

public class Example {

    public static<T extends Number >T get(Class<T> type) {
        return null;
    }

}

(我用Number作为绑定,但你可以任意选择)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM