method handles and open packages

forax at univ-mlv.fr forax at univ-mlv.fr
Sat Jul 21 20:09:08 UTC 2018


----- Mail original -----
> De: "Michał Zegan" <webczat_200 at poczta.onet.pl>
> À: "Remi Forax" <forax at univ-mlv.fr>, "jigsaw-dev" <jigsaw-dev at openjdk.java.net>
> Envoyé: Samedi 21 Juillet 2018 21:44:23
> Objet: Re: method handles and open packages

> I would also believe that the unreflect methods would work for this case
> too if the reflected version had access checks already suppressed.

yes, right !
if the signature of the method is fully known, you can use privateLookupIn,
if you have only partial information and need other info (like an annotation, using a naming convention, etc) to find the method, then unreflect* is the way to go.
 
Rémi

> 
> W dniu 21.07.2018 o 19:27, Remi Forax pisze:
>> Hi,
>> 
>> On July 21, 2018 3:43:51 PM UTC, "Michał Zegan" <webczat_200 at poczta.onet.pl>
>> wrote:
>>> Hello,
>>> If I use reflection, I can access every member of every package in a
>>> module if a module opens such package, and that includes private
>>> members.
>>> What, however, about using method handles for that purpose?
>> 
>> https://docs.oracle.com/javase/9/docs/api/java/lang/invoke/MethodHandles.html#privateLookupIn-java.lang.Class-java.lang.invoke.MethodHandles.Lookup-
>> 
>>> Also, if you have a class in module a that wants to deserialize data to
>>> objects of classes in module b, then should module b open a package
>>> with
>>> those classes to a, or maybe, give the deserializer it's lookup object,
>>> in order for it to be able to access members of non exported non opened
>>> packages? It is for the case where the deserializer is called by the
>>> module b. Also I assume that I do not need access to non public members
>>> of classes, like I deserialize using public setters always.
>> 
>> Rémi
>> 
>> 


More information about the jigsaw-dev mailing list