クラス Indexer

java.lang.ObjectSE
org.springframework.expression.spel.ast.SpelNodeImpl
org.springframework.expression.spel.ast.Indexer
実装されたすべてのインターフェース:
OpcodesSpelNode

public class Indexer extends SpelNodeImpl
Indexer は、先行する構造にインデックスを付けて、その構造の特定の要素にアクセスできます。

Java で配列の n 番目の要素にアクセスする場合など、数値インデックス値はゼロから始まります。

サポートされている構造

  • 配列: n 番目の要素
  • コレクション(リスト、セットなど): n 番目の要素
  • ストリング: n 番目の文字を StringSE として
  • マップ: 指定されたキーの値
  • オブジェクト: 指定された名前のプロパティ
  • カスタム構造: 登録された IndexAccessor 実装経由

Null セーフなインデックス

Spring Framework 6.2 以降、'?.' 演算子を介して null セーフインデックスがサポートされています。例: colors が null の場合、'colors?.[0]' は null に評価され、それ以外の場合は 0 番目の色に評価されます。

導入:
3.0
作成者:
Andy Clement, Phillip Webb, Stephane Nicoll, Sam Brannen
関連事項:
  • コンストラクターの詳細

    • Indexer

      @DeprecatedSE(since="6.2", forRemoval=true) public Indexer(int startPos, int endPos, SpelNodeImpl indexExpression)
      非推奨、削除予定: この API 要素は、将来のバージョンで削除される可能性があります。
      指定された開始位置、終了位置、インデックス式を使用して Indexer を作成します。
      関連事項:
    • Indexer

      public Indexer(boolean nullSafe, int startPos, int endPos, SpelNodeImpl indexExpression)
      指定された null セーフフラグ、開始位置、終了位置、インデックス式を使用して Indexer を作成します。
      導入:
      6.2
  • メソッドの詳細

    • isNullSafe

      public final boolean isNullSafe()
      このノードは null セーフなインデックス操作を表していますか ?
      オーバーライド:
      クラス SpelNodeImplisNullSafe 
      戻り値:
      true このノードが null セーフ操作のターゲットである場合
      導入:
      6.2
    • getValueInternal

      public TypedValue getValueInternal(ExpressionState state) throws EvaluationException
      次で指定:
      クラス SpelNodeImplgetValueInternal 
      例外:
      EvaluationException
    • setValueInternal

      public TypedValue setValueInternal(ExpressionState state, SupplierSE<TypedValue> valueSupplier) throws EvaluationException
      クラスからコピーされた説明: SpelNodeImpl
      式をノードに評価し、指定された SupplierSE によって作成された新しい値をそのノードに設定します。

      例: 式がプロパティ参照に評価される場合、プロパティは新しい値に設定されます。

      値を遅延計算する必要がある場合は、SpelNodeImpl.setValue(ExpressionState, Object) よりもこの方法を優先します。

      デフォルトでは、このメソッドは SpelEvaluationException をスローし、この機能を効果的に無効にします。サブクラスはこのメソッドをオーバーライドして、実際の実装を提供できます。

      オーバーライド:
      クラス SpelNodeImplsetValueInternal 
      パラメーター:
      state - 現在の式の状態 (コンテキストを含みます)
      valueSupplier - 新しい価値の提供者
      例外:
      EvaluationException - 式の評価または新しい値の設定で問題が発生した場合
    • isWritable

      public boolean isWritable(ExpressionState expressionState) throws SpelEvaluationException
      インターフェースからコピーされた説明: SpelNode
      この式ノードが setValue() 呼び出しをサポートするかどうかを決定します。
      次で指定:
      インターフェース SpelNodeisWritable 
      オーバーライド:
      クラス SpelNodeImplisWritable 
      パラメーター:
      expressionState - 現在の式の状態 (コンテキストを含みます)
      戻り値:
      式ノードが setValue() を許可する場合は true
      例外:
      SpelEvaluationException
    • getValueRef

      protected ValueRef getValueRef(ExpressionState state) throws EvaluationException
      オーバーライド:
      クラス SpelNodeImplgetValueRef 
      例外:
      EvaluationException
    • isCompilable

      public boolean isCompilable()
      インターフェースからコピーされた説明: SpelNode
      このノードをバイトコードにコンパイルできるかどうかを判断します。

      各ノードでの推論は異なる場合がありますが、通常は、ノードの終了型記述子が既知であるかどうか、および関連する子ノードがコンパイル可能であるかどうかをチェックします。

      デフォルトの実装は false を返します。

      このメソッドをオーバーライドする場合は、SpelNode.generateCode(MethodVisitor, CodeFlow) もオーバーライドする必要があります。

      戻り値:
      このノードをバイトコードにコンパイルできる場合は true 
      関連事項:
    • generateCode

      public void generateCode(MethodVisitor mv, CodeFlow cf)
      インターフェースからコピーされた説明: SpelNode
      このノードのバイトコードを指定された MethodVisitor に生成します。

      コンパイル中の現在の式に関するコンテキスト情報は、提供された CodeFlow オブジェクトで入手できます。たとえば、現在スタック上にあるオブジェクトの型に関する情報などです。

      SpelNode.isCompilable() が true を返さない限り、このメソッドは呼び出されません。

      デフォルトでは、SpelNode.isCompilable() は false を返すため、デフォルトの実装では IllegalStateExceptionSE がスローされます。

      このメソッドをオーバーライドする場合は、SpelNode.isCompilable() もオーバーライドする必要があります。

      パラメーター:
      mv - コードが生成される ASM MethodVisitor 
      cf - スタック上にあるものに関する情報を持つコンテキストオブジェクト
      関連事項:
    • toStringAST

      public StringSE toStringAST()
      インターフェースからコピーされた説明: SpelNode
      この AST ノードの文字列形式を返します。
      戻り値:
      文字列形式