2013-01-18 2 views
1

Xtend Xbase API를 사용하여 간단한 Java mathod를 생성합니다. 이것은 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. 

있어 생성 된 코드에서 최종 수식어?

다비드

답변

3

방법 매개 변수는 당신의 방법에 포함 된 식의 연결/범위 지정에서 최종으로 간주됩니다. 매개 변수가 final이 아닌 경우 람다 식에서는 매개 변수를 사용할 수 없습니다. 불행히도 매개 변수에 대한 반사 API (java.lang.reflect)에는 'final'의 수단이 없습니다. 따라서 'isFinal'속성은 노출 될 수 없지만 단순히 내부적으로 표시합니다.

'이 표현식은 부작용을 일으키지 않으므로이 컨텍스트에서는 허용되지 않습니다.'라는 오류 메시지가 표시됩니다. 그러나 오해의 소지가있다. 그것은 그러한 방법이 없다는 것을 실제 오류로 암시합니다. JvmFormalParameter.setFinal(boolean).