[lworld] setAccessible change and VarHandle test update

mandy chung mandy.chung at oracle.com
Thu Mar 22 23:57:05 UTC 2018


This is good.  Thanks.   Field::set throws IAE if it's a value type.  No 
change is needed in the implementation.  I have made minor change to 
Field::setAccessible to drop the final modifier change.

Paul,

I finally got the chance to modify the VarHandleTestMethodHandleAccess* 
test.  Can you review this patch:
http://cr.openjdk.java.net/~mchung/valhalla/webrevs/lworld-reflection-varhandles-2/

Mandy

On 3/9/18 5:07 PM, John Rose wrote:
> I think the "final means final" discussion applies only to objects
> with identity and at least the potential of a changeable state
> A value has no identity, and no way to express a change in
> state.  Attempting to change the state of a value (e.g., by
> updating a field) must *always* result in a new value,
> not somehow "the old value but with a different value".
>
> Thus, Field.set is an impossible operation for a field of
> a value type.  Not an inaccessible or unsafe or unwise
> operation, an impossible one.
>
> (This is the deep reason we can and should move ourselves
> away from using "final" as a modifier for fields in value classes:
> The word "final" doesn't mean what you think it means there.
> It's not just that you are not allowed to assign to it; it is that
> it intrinsically cannot change without changing the enclosing
> value along with it.)
>
> A new operation Field.with or Field.update could make
> sense for values, but the access control rules for it are
> not yet clear.
>
> Bottom line:  Field.set must not "do something" on value class
> fields (fields of any type: ref/prim/val), under any circumstances
> (final or not, setAccessible or not).
>
> — John



More information about the valhalla-dev mailing list