Hi, Of course, private field access is allowed to your own class if you use a private lookup object. The setAccessible hack is only needed when reflection would also be needed for frameworks or other "superusers".
Uwe Am 8. Dezember 2016 22:10:32 MEZ schrieb Uwe Schindler <uschind...@apache.org>: >Hi, > >You can first do standard reflection, then use setAccessible and >finally use the Lookup object to convert the now-accessible Field >instance to a MethodHandle or VarHandle. You just have to know that >way, existing since Java 7. > >Uwe > >Am 8. Dezember 2016 21:49:04 MEZ schrieb Nathan Mittler ><nathanmitt...@google.com>: >>Hi Roger, >>If I read that correctly, lookups still have to go through access >>checks >>which would seem to imply that they can't be used for private field >>access. >>Or am I misunderstanding? >> >>On Thu, Dec 8, 2016 at 11:51 AM, Roger Riggs <roger.ri...@oracle.com> >>wrote: >> >>> Hi Nathan, >>> >>> Have you looked at VarHandles? [1] >>> It is possible to use MethodsHandles.Lookup to get a VarHandle to an >>> unreflected field. >>> >>> Roger >>> >>> [1] http://download.java.net/java/jdk9/docs/api/java/lang/invoke >>> /MethodHandles.Lookup.html >>> >>> >>> >>> On 12/8/2016 1:03 PM, Nathan Mittler wrote: >>> >>>> Hi everyone, >>>> >>>> Apologies in advance if this isn't the correct forum for this >>question. My >>>> team is working on an experimental runtime for Google's protocol >>buffers >>>> which is currently relying on sun.misc.Unsafe to perform various >>tasks >>>> efficiently. I'm aware that the plan is to eventually remove Unsafe >>>> altogether, and I want to make sure that we still have a way to >move >>>> forward with future versions of Java. >>>> >>>> The code is up on a github branch ( >>>> https://github.com/google/protobuf/tree/java_experimental). >>>> >>>> For an example of the sorts of things our runtime needs to do, you >>can >>>> look >>>> at the serialization code ( >>>> https://github.com/google/protobuf/blob/java_experimental/ >>>> >>java/core/src/main/java/com/google/protobuf/AbstractProto3Schema.java#L49 >>>> ). >>>> >>>> The idea is that the runtime dynamically determines information >>about >>>> message fields (e.g. field types, offsets) and stores it into a >>single >>>> buffer. Our main need is fast read/write access to the private >>fields of >>>> our generated message classes. Java reflection would be too slow >and >>would >>>> require data representation as a list of objects, rather than a >>continuous >>>> buffer (much less compact and cache-friendly). Security >restrictions >>would >>>> be a concern as well. At first glance at Java 9, I don't see any >>>> facilities >>>> that would help here. >>>> >>>> This would seem to be a fairly common use case a low-level >>serialization >>>> framework, such as protobuf. Are there any thoughts on how such a >>use case >>>> could be supported post-Unsafe? >>>> >>>> Thanks, >>>> Nathan >>>> >>> >>> > >-- >Uwe Schindler >Achterdiek 19, 28357 Bremen >https://www.thetaphi.de