RFR: 8220607 Draft JEP: Hidden Classes

Brian Goetz brian.goetz at oracle.com
Fri Dec 6 22:51:50 UTC 2019

> Another asymmetry between Lookup::defineClass and defineHiddenClass is 
> the return value, Class vs Lookup.
> It's trivial to get the class from a Lookup object but we can't go the 
> other way. If a framework wants to get Lookup from a hidden class it 
> just defines (e.g. get a MethodHandle and invoke), if dHC returned a 
> Class, the hidden class had to provide an entry point to return its 
> Lookup object.  Such entry point has to be accessible to the framework 
> but it has to be cautious in leaking its full-power Lookup.

For the reasons you give, this asymmetry doesn't bother me.  Most users 
of dC will want the class; users of dHC will generally _need_ the lookup.

> I have considered adding Lookup::defineClassAsLookup(byte[] bytes, 
> boolean initialize).   Lookup::defineClass was added in JDK 9.   I 
> haven't seen any request to initialize the class.   So I think it can 
> be done as a separate enhancement.  I will file a JBS issue.

I agree that this should be a separate enhancement. I'd like to see this 
bit of unsafe removed too, but no need to hold up this train to get to 
that one.

More information about the valhalla-dev mailing list