Hello

The VarHandle #get* and #set* methods currently document the following three possible exceptions in their Javadoc

- ClassCastException
- WrongMethodTypeException
- UnsupportedOperationException, only for #set*

However, when a VarHandle was created using MethodHandles#byteArrayViewVarHandle or MethodHandles#byteBufferViewVarHandle and the index, the second argument, is incorrect then an IndexOutOfBoundsException is thrown. At some point between JDK 11 and JDK 17 a #byteArrayViewVarHandle was changed so that ArrayIndexOutOfBoundsException is thrown.

The following code is an example:

VarHandle LONG_BA_BE = MethodHandles.byteArrayViewVarHandle(long[].class, ByteOrder.BIG_ENDIAN);
byte[] array = new byte[] {8, 7, 6, 5, 4, 3, 2, 1};
long l = (long) LONG_BA_BE.get(array, -1);
System.out.println(l);

Cheers
Philippe

Reply via email to