1

我正在尝试使用 Xtend Xbase API 生成一个简单的 Java 数学。这是 Xtend 代码。

        var jvmMethod = element.toMethod("fromSap",element.newTypeRef(element.dtoFullName))[
    var jvmTypeReference= fromSap.sapType;
    var param = toParameter("sapOb",jvmTypeReference)
    parameters+=param
    body = ['''....''')]

除了具有最终修饰符的参数外,一切正常。这是生成的代码:

  public class DTOTest {
     public DTOTest fromSap(final String sapOb) {
    DTOTest result = new DTOTest();
    return result;   
  }
}

我试图添加:

param.setFinal(false);

但我得到了

This expression is not allowed in this context, since it doesn't cause any side effects.

在编译时

有人可以帮我从生成的代码中删除 final 修饰符吗?

戴维德

4

1 回答 1

3

方法参数在您的方法中包含的表达式的链接/作用域中被认为是最终的。如果参数不是最终的,则不能在 lambda 表达式中使用它们。不幸的是,反射 API (java.lang.reflect) 中没有参数的“最终”方法。因此,不能公开任何属性“isFinal”,但我们只是在内部将它们标记为这样。

错误消息“此表达式在此上下文中是不允许的,因为它不会导致任何副作用。” 虽然是误导。它可能掩盖了没有这种方法的真正错误JvmFormalParameter.setFinal(boolean)

于 2013-01-18T12:06:35.420 回答