method handles and open packages

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

method handles and open packages

Michał Zegan
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?
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.
Reply | Threaded
Open this post in threaded view
|

Re: method handles and open packages

Remi Forax
Hi,

On July 21, 2018 3:43:51 PM UTC, "Michał Zegan" <[hidden email]> 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



--
Sent from my Android device with K-9 Mail. Please excuse my brevity.
Reply | Threaded
Open this post in threaded view
|

Re: method handles and open packages

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

W dniu 21.07.2018 o 19:27, Remi Forax pisze:

> Hi,
>
> On July 21, 2018 3:43:51 PM UTC, "Michał Zegan" <[hidden email]> 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
>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: method handles and open packages

Remi Forax
----- Mail original -----
> De: "Michał Zegan" <[hidden email]>
> À: "Remi Forax" <[hidden email]>, "jigsaw-dev" <[hidden email]>
> 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" <[hidden email]>
>> 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
>>
>>