gpt4 book ai didi

java - 将 JExpression (JOp.cond()) 添加到 JBlock(JMethod 主体)

转载 作者:行者123 更新时间:2023-12-01 09:36:21 25 4
gpt4 key购买 nike

我想将 if - else 语句重构为三元运算符。

if ((变量) == null) {
... 做一点事
} 别的 {
...做点别的事
}

使用 Codemodel 创建三元运算符非常简单,就像使用 JOp.cond() 一样,我们可以传入条件、ifTrue 和 ifFalse 参数来返回三元语句。

我的问题是将 JExpression 添加到方法体(JBlock)中:

private void printSomeObject(final JMethod toStringMethod, FieldOutline fo) {
String property = fo.getPropertyInfo().getName(false);
JBlock block = toStringMethod.body();

JExpression cond = JExpr.direct(property).eq(JExpr._null());
JExpression ifTrue = JExpr.direct("... do something");
JExpression ifFalse = JExpr.direct("... do something else");
JExpression ternary = JOp.cond(cond, ifTrue, ifFalse);
// toStringMethod.body().add(generateBody(ternary)); ONLY WORKS WITH JSTATEMENT
...
}

有人知道如何将 JExpression 添加到 JBlock 吗?

最佳答案

三元运算符用作返回值的语句。它不是 if/else block 的直接替代。

尝试编译以下内容,它会失败:

1 == 1 ? System.out.pritln("true") : System.out.println("false");

JCodeModel 在这里要求三元数是 JExpression 是正确的。要将其添加到 JBlock,您需要将其分配给一个变量:

JDefinedClass output = codeModel._class(JMod.PUBLIC, "org.Test", ClassType.CLASS);
JMethod method = output.method(JMod.PUBLIC, codeModel.VOID, "test");
method.body().decl(codeModel.ref(String.class), "value", JOp.cond(JExpr.lit(1).eq(JExpr.lit(1)), JExpr.lit("true"), JExpr.lit("false")));

生成:

public class Test {

public void test() {
String value = ((1 == 1)?"true":"false");
}

}

关于java - 将 JExpression (JOp.cond()) 添加到 JBlock(JMethod 主体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38871713/

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