2013-01-18 59 views
1

我正在使用Xtend Xbase API生成一個簡單的Java方法。 這是Xtend代碼。Xtext Xbase JvmTypesBuilder只生成最終參數

 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

回答

3

方法的參數被認爲是最終在包含在你的方法表達的連接/作用域。如果參數不是最終的,它們都不能在lambda表達式中使用。不幸的是,在參數的反射API(java.lang.reflect)中沒有「final」的意思。因此,沒有財產'isFinal'可以暴露,但我們只是在內部標記它們。

錯誤消息'此表達式在此上下文中不被允許,因爲它不會導致任何副作用。'是誤導。它可能會影響真正的錯誤,即沒有這種方法JvmFormalParameter.setFinal(boolean)