gpt4 book ai didi

java - 如何使用 Sun/Oracle CodeModel 库进行类型转换?

转载 作者:行者123 更新时间:2023-12-03 02:00:50 26 4
gpt4 key购买 nike

我正在尝试使用 Java CodeModel library生成一些代码。在我生成的代码中,我需要执行类型转换。我想要这样的东西...

foo.setBar( ((TypeCastToThis)someVariable).getBar() );

我在库中找到的唯一支持是使用 JCast JExpr.cast(JType type, JExpression expr) 。然而,根据 Eclipse,返回类型 JCast 不是公开的。确切的错误是:“com.sun.codemodel.JCast 类型不可见”。

这是我正在做的事情的一个简单示例。

import java.io.File;

import com.sun.codemodel.JBlock;
import com.sun.codemodel.JCast; //<-- Eclipse flags this as an error
import com.sun.codemodel.JClass;
import com.sun.codemodel.JClassAlreadyExistsException;
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.JVar;



public class CastTest
{

public static void main(String[] args) throws JClassAlreadyExistsException
{
// TODO Auto-generated method stub

JCodeModel codeModel = new JCodeModel();
JDefinedClass testClass = codeModel._class("MyTestClass");

JMethod testMeth = testClass.method(JMod.PUBLIC, codeModel.VOID, "TypeCastTestMethod");

JBlock testMethBody = testMeth.body();

JVar castMeVar = testMethBody.decl(codeModel.INT, "castMe", JExpr.lit(42));

JClass typeCastToThisClass = codeModel.directClass("TypeCastToThis");

JCast castResult = JExpr.cast(typeCastToThisClass, castMeVar);

testMethBody.decl(typeCastToThisClass, "theTypeCastedObject", castResult);

codeModel.build(new File("/path/to/output/directory"));
}

/*

The generated code should look like this.

public void TypeCastTestMethod()
{
int castMe = 42;
TypeCastToThis theTypeCastedObject = (TypeCastToThis)castMe;
}

*/
}

我是否错误地使用了该库和/或是否有其他方法可以实现我的目标?

最佳答案

如果其他人稍后遇到此问题,可以通过在 JExpr.cast(....) 的返回值上从 JCast 隐式向上转换为 JExpression 来绕过该问题。 JCast 是 JExpression 的子类型。

来自......

JCast castResult = JExpr.cast(typeCastToThisClass, castMeVar);

致......

JExpression castResult = JExpr.cast(typeCastToThisClass, castMeVar);

关于java - 如何使用 Sun/Oracle CodeModel 库进行类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10404384/

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