# ScopedValue (JEP 506). Preview API in 21, final in 25. $ javac ScopedValueDemo.java (JDK 21, no flag) /lanes/src/ScopedValueDemo.java:9: error: ScopedValue is a preview API and is disabled by default. static final ScopedValue CURRENT_USER = ScopedValue.newInstance(); ^ (use --enable-preview to enable preview APIs) /lanes/src/ScopedValueDemo.java:9: error: ScopedValue is a preview API and is disabled by default. static final ScopedValue CURRENT_USER = ScopedValue.newInstance(); ^ (use --enable-preview to enable preview APIs) /lanes/src/ScopedValueDemo.java:13: error: ScopedValue is a preview API and is disabled by default. ScopedValue.where(CURRENT_USER, "ankur").run(() -> { ^ (use --enable-preview to enable preview APIs) 3 errors exit=1 $ javac ScopedValueDemo.java (JDK 25, no flag) exit=0 $ java ScopedValueDemo (JDK 25) java.version = 25.0.4.1 CHECK ok : inside the scope: CURRENT_USER.get() == ankur CHECK ok : a method that was never passed the value still sees it CHECK ok : outside the scope: CURRENT_USER.get() throws NoSuchElementException $ javac ScopedValueDemo.java (JDK 26, no flag) exit=0 $ java ScopedValueDemo (JDK 26) java.version = 26.0.2.1 CHECK ok : inside the scope: CURRENT_USER.get() == ankur CHECK ok : a method that was never passed the value still sees it CHECK ok : outside the scope: CURRENT_USER.get() throws NoSuchElementException $ javac ScopedValueDemo.java (JDK 27, no flag) exit=0 $ java ScopedValueDemo (JDK 27) java.version = 27 CHECK ok : inside the scope: CURRENT_USER.get() == ankur CHECK ok : a method that was never passed the value still sees it CHECK ok : outside the scope: CURRENT_USER.get() throws NoSuchElementException