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