4.19. スコープ付きの値 (プレビュー)


Red Hat build of OpenJDK 21 では、スコープ値が導入されています。これは、scoped value 変数をサポートする API を提供するプレビュー機能です。通常、scoped value 変数は、多くのメソッドからアクセスできる最終的な静的フィールドとして宣言されます。

scoped value は、メソッドパラメーターを使用せずにメソッド間で変数を共有する安全で効率的な方法を提供します。scoped value は、メソッド自体でパラメーターを宣言しなくてもメソッドが使用できる暗黙的なメソッドパラメーターに相当します。scoped value オブジェクトにアクセスできるメソッドのみがそのデータにアクセスできます。scoped value を使用すると、アプリケーションは、このデータのパラメーターを宣言せず、そのデータにアクセスできない他の中間メソッドを介して、呼び出し元から呼び出し先にデータを安全に渡すことができます。scoped value は、特に多数の仮想スレッドを使用する場合に、thread-local 変数の代わりとして推奨されます。

呼び出し先メソッド (bar) がネストされたバインディング内にある同じ scoped value を使用して、別の呼び出し先メソッド (baz) に異なる値を送信できる次のコード例を見てみましょう。

private static final ScopedValue<String> X = ScopedValue.newInstance();

void main() {
	ScopedValue.where(X, "hello").run(() -> bar());
}

void bar() {
	System.out.println(X.get()); // prints hello
	ScopedValue.where(X, "goodbye").run(() -> baz());
	System.out.println(X.get()); // prints hello
}

void baz() {
	System.out.println(X.get()); // prints goodbye
}
Copy to Clipboard

前の例では、main() メソッドは scoped value Xhello に設定し、この値を bar() メソッドに送信します。bar() メソッドは hello (X の値) を出力し、ネストされたバインディングを使用して X の値を変更し、変更された値を baz() メソッドに送信します。baz() メソッドが戻ると、bar() メソッドの残りの部分には、X の元の hello 値が残ります。

詳細は、JEP 446: Scoped Values (Preview) を参照してください。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat