2
は私がJCodeModelでジェネリックメソッドを生成するには?
public static <T extends SomeObject> T get(Class<T> type) {
...
return null;
}
誰のような一般的な方法は前にこれを行って生成する必要がありますか?
は私が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
を使用していますが、任意にそれを選択することができます)