RFR: implementation for JEP 334: JVM Constants API
jbvernee at xs4all.nl
Mon May 28 00:52:25 UTC 2018
Sorry for keeping this going, but I keep thinking of new things a few
hours later (there goes my Sunday :/).
I'm wondering if the return type of `Constable::describeConstable` is
actually correct. Right now it's `Optional<? extends ConstantDesc<?
super T>>`, but why are you using `ConstantDesc<? super T>`? Since
`ConstantDesc` is a _producer_ of `T` PECS dictates that it should use
co-variance, i.e.: `ConstantDesc<? extends T>`, so that would make
`Optional<? extends ConstantDesc<? extends T>>` the return type. (a
ConstantDesc that resolves to a String can also be viewed as a
ConstantDesc that resolves to an Object)
That way you don't even have the problem I was trying to solve before,
and the return type of `EnumDesc::describeConstable` (and similarly for
`VarHandleDesc`) can be `Optional<DynamicConstantDesc<EnumDesc<E>>>`
which is the exact type that is being returned, which is what is wanted
On that note, you could also change the return type of
`describeConstable` for the box types and String to return an optional
of the type itself (since they're their own descriptor, each implements
`ConstantDesc` of itself). For instance, for `Double` this would change
from `Optional<ConstantDesc<Double>>` to `Optional<Double>`.
More information about the amber-dev