1

Xtend Xbase APIを使用して、単純なJavamathodを生成しようとしています。これは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.

コンパイル時

誰かが生成されたコードから最後の修飾子を削除するのを手伝ってもらえますか?

ダビデ

4

1 に答える 1

3

メソッド パラメーターは、メソッドに含まれる式のリンク/スコープにおいて最終的なものと見なされます。パラメーターが final でない場合、ラムダ式内から使用することはできませんでした。残念ながら、パラメータのリフレクション API (java.lang.reflect) には「最終」の手段がありません。したがって、プロパティ「isFinal」を公開することはできませんが、内部的にそのようにマークするだけです。

エラーメッセージ「この式は、副作用を引き起こさないため、このコンテキストでは許可されていません。」誤解を招きますが。そのようなメソッドが存在しないという本当のエラーを隠している可能性がありますJvmFormalParameter.setFinal(boolean)

于 2013-01-18T12:06:35.420 に答える