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

Reply via email to