プロパティ、配列、リスト、マップ、インデクサー

プロパティ参照を使用したナビゲートは簡単です。これを行うには、ピリオドを使用してネストされたプロパティ値を示します。Inventor クラスのインスタンスである pupin および tesla には、例で使用されているクラスセクションにリストされているデータが入力されています。オブジェクトグラフを「下」に移動して、テスラの誕生年とピューピンの誕生都市を取得するには、次の式を使用します。

  • Java

  • Kotlin

// evaluates to 1856
int year = (Integer) parser.parseExpression("birthdate.year + 1900").getValue(context);

String city = (String) parser.parseExpression("placeOfBirth.city").getValue(context);
// evaluates to 1856
val year = parser.parseExpression("birthdate.year + 1900").getValue(context) as Int

val city = parser.parseExpression("placeOfBirth.city").getValue(context) as String

プロパティ名の最初の文字では、大文字と小文字を区別しないことが許可されています。上記の例の式は、それぞれ Birthdate.Year + 1900 および PlaceOfBirth.City と書くことができます。さらに、プロパティには、オプションでメソッド呼び出しを介してアクセスできます(たとえば、placeOfBirth.city ではなく getPlaceOfBirth().getCity())。

配列とリストの内容は、次の例に示すように、角括弧表記を使用して取得されます。

  • Java

  • Kotlin

ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();

// Inventions Array

// evaluates to "Induction motor"
String invention = parser.parseExpression("inventions[3]").getValue(
		context, tesla, String.class);

// Members List

// evaluates to "Nikola Tesla"
String name = parser.parseExpression("members[0].name").getValue(
		context, ieee, String.class);

// List and Array navigation
// evaluates to "Wireless communication"
String invention = parser.parseExpression("members[0].inventions[6]").getValue(
		context, ieee, String.class);
val parser = SpelExpressionParser()
val context = SimpleEvaluationContext.forReadOnlyDataBinding().build()

// Inventions Array

// evaluates to "Induction motor"
val invention = parser.parseExpression("inventions[3]").getValue(
		context, tesla, String::class.java)

// Members List

// evaluates to "Nikola Tesla"
val name = parser.parseExpression("members[0].name").getValue(
		context, ieee, String::class.java)

// List and Array navigation
// evaluates to "Wireless communication"
val invention = parser.parseExpression("members[0].inventions[6]").getValue(
		context, ieee, String::class.java)

マップの内容は、括弧内のリテラルキー値を指定することにより取得されます。次の例では、officers マップのキーは文字列であるため、文字列リテラルを指定できます。

  • Java

  • Kotlin

// Officer's Dictionary

Inventor pupin = parser.parseExpression("officers['president']").getValue(
		societyContext, Inventor.class);

// evaluates to "Idvor"
String city = parser.parseExpression("officers['president'].placeOfBirth.city").getValue(
		societyContext, String.class);

// setting values
parser.parseExpression("officers['advisors'][0].placeOfBirth.country").setValue(
		societyContext, "Croatia");
// Officer's Dictionary

val pupin = parser.parseExpression("officers['president']").getValue(
		societyContext, Inventor::class.java)

// evaluates to "Idvor"
val city = parser.parseExpression("officers['president'].placeOfBirth.city").getValue(
		societyContext, String::class.java)

// setting values
parser.parseExpression("officers['advisors'][0].placeOfBirth.country").setValue(
		societyContext, "Croatia")