gpt4 book ai didi

java - Sun Codemodel 泛型方法调用

转载 作者:行者123 更新时间:2023-11-30 07:08:48 24 4
gpt4 key购买 nike

我正在使用 Codemodel 库来生成 java 类。有没有办法生成如下所示的通用方法调用:

clazz.<String>get(value)

当然有一种方法可以使用以下表达式将返回结果转换为正确的类型:

JExpr.cast(stringType, clazz.invoke("get").arg(value))

结果

(String) clazz.get(value)

但首选的转换方式是第一种,因为此代码正在生成模板供开发人员进一步手动编辑。

最佳答案

对于现有的 JCodeModel API,没有预先构建的方法来处理这个问题。但是,您可以定义自己的 JStatement 类型来生成通用声明,如下所示:

    JDefinedClass definedClass = codeModel._class(JMod.PUBLIC, "org.test.Tester", ClassType.CLASS);

JMethod method = definedClass.method(JMod.PUBLIC, codeModel.VOID, "test");

final JType targetType = codeModel.ref(String.class);
final JVar clazzVar = method.body().decl(codeModel.ref(Class.class), "clazz", JExpr.invoke("getClass"));

method.body().add(new JStatement(){
@Override
public void state(JFormatter f) {
f.g(clazzVar).p(".<").g(targetType).p(">").p("get").p("();").nl();
}
});

生成:

package org.test;

public class Tester {

public void test() {
Class clazz = getClass();
clazz.<String >get();
}
}

这绝不是一个完整的解决方案(例如,它缺少方法调用参数)。查看 JInphonicgenerate() 方法的实现,了解所需的详细信息。

关于java - Sun Codemodel 泛型方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39567984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com