< prev index next >

src/java.base/share/classes/java/lang/invoke/VarHandle.java

Print this page

 456  * {@link java.lang.invoke.MethodHandles#varHandleInvoker}.
 457  *
 458  * <h2>Interoperation between VarHandles and Java generics</h2>
 459  * A VarHandle can be obtained for a variable, such as a field, which is
 460  * declared with Java generic types.  As with the Core Reflection API, the
 461  * VarHandle's variable type will be constructed from the erasure of the
 462  * source-level type.  When a VarHandle access mode method is invoked, the
 463  * types
 464  * of its arguments or the return value cast type may be generic types or type
 465  * instances.  If this occurs, the compiler will replace those types by their
 466  * erasures when it constructs the symbolic type descriptor for the
 467  * {@code invokevirtual} instruction.
 468  *
 469  * @see MethodHandle
 470  * @see MethodHandles
 471  * @see MethodType
 472  * @since 9
 473  */
 474 public abstract sealed class VarHandle implements Constable
 475      permits IndirectVarHandle, LazyInitializingVarHandle, SegmentVarHandle,

 476              VarHandleByteArrayAsChars.ByteArrayViewVarHandle,
 477              VarHandleByteArrayAsDoubles.ByteArrayViewVarHandle,
 478              VarHandleByteArrayAsFloats.ByteArrayViewVarHandle,
 479              VarHandleByteArrayAsInts.ByteArrayViewVarHandle,
 480              VarHandleByteArrayAsLongs.ByteArrayViewVarHandle,
 481              VarHandleByteArrayAsShorts.ByteArrayViewVarHandle,
 482              VarHandleBooleans.Array,
 483              VarHandleBooleans.FieldInstanceReadOnly,
 484              VarHandleBooleans.FieldStaticReadOnly,
 485              VarHandleBytes.Array,
 486              VarHandleBytes.FieldInstanceReadOnly,
 487              VarHandleBytes.FieldStaticReadOnly,
 488              VarHandleChars.Array,
 489              VarHandleChars.FieldInstanceReadOnly,
 490              VarHandleChars.FieldStaticReadOnly,
 491              VarHandleDoubles.Array,
 492              VarHandleDoubles.FieldInstanceReadOnly,
 493              VarHandleDoubles.FieldStaticReadOnly,
 494              VarHandleFloats.Array,
 495              VarHandleFloats.FieldInstanceReadOnly,
 496              VarHandleFloats.FieldStaticReadOnly,
 497              VarHandleInts.Array,
 498              VarHandleInts.FieldInstanceReadOnly,
 499              VarHandleInts.FieldStaticReadOnly,
 500              VarHandleLongs.Array,
 501              VarHandleLongs.FieldInstanceReadOnly,
 502              VarHandleLongs.FieldStaticReadOnly,
 503              VarHandleReferences.Array,
 504              VarHandleReferences.FieldInstanceReadOnly,
 505              VarHandleReferences.FieldStaticReadOnly,
 506              VarHandleShorts.Array,
 507              VarHandleShorts.FieldInstanceReadOnly,
 508              VarHandleShorts.FieldStaticReadOnly {




 509     final VarForm vform;
 510     final boolean exact;
 511 
 512     VarHandle(VarForm vform) {
 513         this(vform, false);
 514     }
 515 
 516     VarHandle(VarForm vform, boolean exact) {
 517         this.vform = vform;
 518         this.exact = exact;
 519     }
 520 
 521     /**
 522      * Returns the target VarHandle.   Subclasses may override this method to implement
 523      * additional logic for example lazily initializing the declaring class of a static field var handle.
 524      */
 525     @ForceInline
 526     VarHandle target() {
 527         return asDirect();
 528     }

 456  * {@link java.lang.invoke.MethodHandles#varHandleInvoker}.
 457  *
 458  * <h2>Interoperation between VarHandles and Java generics</h2>
 459  * A VarHandle can be obtained for a variable, such as a field, which is
 460  * declared with Java generic types.  As with the Core Reflection API, the
 461  * VarHandle's variable type will be constructed from the erasure of the
 462  * source-level type.  When a VarHandle access mode method is invoked, the
 463  * types
 464  * of its arguments or the return value cast type may be generic types or type
 465  * instances.  If this occurs, the compiler will replace those types by their
 466  * erasures when it constructs the symbolic type descriptor for the
 467  * {@code invokevirtual} instruction.
 468  *
 469  * @see MethodHandle
 470  * @see MethodHandles
 471  * @see MethodType
 472  * @since 9
 473  */
 474 public abstract sealed class VarHandle implements Constable
 475      permits IndirectVarHandle, LazyInitializingVarHandle, SegmentVarHandle,
 476              ArrayVarHandle,
 477              VarHandleByteArrayAsChars.ByteArrayViewVarHandle,
 478              VarHandleByteArrayAsDoubles.ByteArrayViewVarHandle,
 479              VarHandleByteArrayAsFloats.ByteArrayViewVarHandle,
 480              VarHandleByteArrayAsInts.ByteArrayViewVarHandle,
 481              VarHandleByteArrayAsLongs.ByteArrayViewVarHandle,
 482              VarHandleByteArrayAsShorts.ByteArrayViewVarHandle,
 483              VarHandleBooleans.Array,
 484              VarHandleBooleans.FieldInstanceReadOnly,
 485              VarHandleBooleans.FieldStaticReadOnly,
 486              VarHandleBytes.Array,
 487              VarHandleBytes.FieldInstanceReadOnly,
 488              VarHandleBytes.FieldStaticReadOnly,
 489              VarHandleChars.Array,
 490              VarHandleChars.FieldInstanceReadOnly,
 491              VarHandleChars.FieldStaticReadOnly,
 492              VarHandleDoubles.Array,
 493              VarHandleDoubles.FieldInstanceReadOnly,
 494              VarHandleDoubles.FieldStaticReadOnly,
 495              VarHandleFloats.Array,
 496              VarHandleFloats.FieldInstanceReadOnly,
 497              VarHandleFloats.FieldStaticReadOnly,
 498              VarHandleInts.Array,
 499              VarHandleInts.FieldInstanceReadOnly,
 500              VarHandleInts.FieldStaticReadOnly,
 501              VarHandleLongs.Array,
 502              VarHandleLongs.FieldInstanceReadOnly,
 503              VarHandleLongs.FieldStaticReadOnly,

 504              VarHandleReferences.FieldInstanceReadOnly,
 505              VarHandleReferences.FieldStaticReadOnly,
 506              VarHandleShorts.Array,
 507              VarHandleShorts.FieldInstanceReadOnly,
 508              VarHandleShorts.FieldStaticReadOnly,
 509              VarHandleFlatValues.FieldInstanceReadOnly,
 510              VarHandleNonAtomicReferences.FieldInstanceReadOnly,
 511              VarHandleNonAtomicReferences.FieldStaticReadOnly,
 512              VarHandleNonAtomicFlatValues.FieldInstanceReadOnly {
 513     final VarForm vform;
 514     final boolean exact;
 515 
 516     VarHandle(VarForm vform) {
 517         this(vform, false);
 518     }
 519 
 520     VarHandle(VarForm vform, boolean exact) {
 521         this.vform = vform;
 522         this.exact = exact;
 523     }
 524 
 525     /**
 526      * Returns the target VarHandle.   Subclasses may override this method to implement
 527      * additional logic for example lazily initializing the declaring class of a static field var handle.
 528      */
 529     @ForceInline
 530     VarHandle target() {
 531         return asDirect();
 532     }
< prev index next >