VarAccessor - VarHandle alternative?
Christoph Engelbert
chris at hazelcast.com
Sat Aug 8 06:52:21 UTC 2015
Hey Peter,
That actually is a very interesting prototype and the implementation would be way easier than the current VarHandles. This kind of double dispatch on VarHandles (especially if you’re missing a specialization method in VarHandleGuards it kind of gets ugly).
I really like your idea!
Chris
> Am 08.08.2015 um 02:28 schrieb Peter Levart <peter.levart at gmail.com>:
>
> Hi,
>
> @PolymorphicSignature methods in VarHandle (combined with generics in FieldHandle) are a way to expose an API that does not explode in the number of different public classes for different primitive types. But aren't any-fied (specialized) generics doing just the same? I know: VarHandles are proposed for JDK9 and any-fied generics aren't there yet.
>
> Anyway, I tried to see if current state of any-fied generics allows me to build an API that is similar in footprint as VarHandle but fully compile-time type safe:
>
> http://cr.openjdk.java.net/~plevart/misc/valhala-hacks/vaccess/VarAccessor.java
>
> With some tricks (type tokens and manual specialization by sub-classing), it can be done as a type-safe wrapper over Unsafe. This implementation is missing proper access checks. It's just a proof of concept.
>
> While playing with this, I noticed a javac inconsistency. The following diamond:
>
> public abstract class VarAccessor<T, any V> {
>
> private static final Map<Class<?>, BiFunction<Class<?>, String, VarAccessor<?, any>>> factories
> = new HashMap<>();
>
> ... does not work. I had to re-specify the full types in the HashMap constructor:
>
> private static final Map<Class<?>, BiFunction<Class<?>, String, VarAccessor<?, any>>> factories
> = new HashMap<Class<?>, BiFunction<Class<?>, String, VarAccessor<?, any>>>();
>
>
> Regards, Peter
>
More information about the valhalla-dev
mailing list