----- Mail original ----- > De: "John Rose" <john.r.r...@oracle.com> > À: "Remi Forax" <fo...@univ-mlv.fr> > Cc: "Brian Goetz" <brian.go...@oracle.com>, "valhalla-spec-experts" > <valhalla-spec-experts@openjdk.java.net> > Envoyé: Jeudi 2 Mai 2019 04:17:54 > Objet: Re: Is V? what we need ?
> It looks like we're getting somewhere; thanks for > the detailed response. I have one targeted reply: > > On May 1, 2019, at 4:38 PM, fo...@univ-mlv.fr wrote: >> >> So let's call it V*. I want also make clear that there is no proposal to not >> have a V*, we need it, and it's the L-version of an inline type for the VM. > > That would an ugly choice, for sure. But it's also a > full disclosure of the presence of the indirection. > > … >> It's not fine to use Integer as parameter of a method. > > There's one place where Integer is OK as a method > parameter or return, and that is when you are reaching > for null as a sentinel. I'm pretty sure I've written code > like that. i should have added "in public API". Here are the offending methods in JDK 12*: java.sql.JDBCType public java.lang.Integer java.sql.JDBCType.getVendorTypeNumber() java.sql.SQLType public abstract java.lang.Integer java.sql.SQLType.getVendorTypeNumber() java.util.PrimitiveIterator$OfInt public default java.lang.Integer java.util.PrimitiveIterator$OfInt.next() java.lang.Integer public static java.lang.Integer java.lang.Integer.valueOf(int) java.lang.Integer public static java.lang.Integer java.lang.Integer.valueOf(java.lang.String,int) throws java.lang.NumberFormatException java.lang.Integer public static java.lang.Integer java.lang.Integer.valueOf(java.lang.String) throws java.lang.NumberFormatException java.lang.Integer public java.lang.Integer java.lang.Integer.resolveConstantDesc(java.lang.invoke.MethodHandles$Lookup) java.lang.Integer public static java.lang.Integer java.lang.Integer.decode(java.lang.String) throws java.lang.NumberFormatException java.lang.Integer public static java.lang.Integer java.lang.Integer.getInteger(java.lang.String,int) java.lang.Integer public static java.lang.Integer java.lang.Integer.getInteger(java.lang.String) java.lang.Integer public static java.lang.Integer java.lang.Integer.getInteger(java.lang.String,java.lang.Integer) > > This, I think, is why V* is OK to spell as V?. My contribution > to this conversation is to explain why, as one of Java's > lumping-not-splitting design moves, we are adjoining > the responsibilities of V* to the contract of V?. > > If V? were purely a value-set variant of V, then V* and V? > would be distinct and subtly different types. But one of > Java's super-powers is that it doesn't *do* that level of > type refinement. yes, i fully agree. > > — John Rémi * i've filtered out JMX because the API is reflection based with limitation on primitive types.