我想使用Xtend Xbase API生成一个简单的Java mathod。 这是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.
在编译时
有人可以帮我从生成的代码中删除最终修饰符吗?
的Davide
答案 0 :(得分:3)
方法参数在方法中包含的表达式的链接/作用域中被认为是最终的。如果参数不是final,则不能在lambda表达式中使用它们。不幸的是,参数的反射API(java.lang.reflect)中没有'final'的方法。因此,没有属性'isFinal'可以暴露,但我们只是在内部标记它们。
错误消息'此上下文中不允许使用此表达式,因为它不会导致任何副作用。虽然有误导性。它可能会影响没有这种方法的真正错误JvmFormalParameter.setFinal(boolean)
。