我正在尝试使用 Java CodeModel 库来生成一些代码。在我生成的代码中,我需要执行类型转换。我想要这样的东西...
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;
}
*/
}
我是否错误地使用了该库和/或是否有其他方法可以实现我的目标?