"Model 2" prototype status
brian.goetz at oracle.com
Fri Aug 7 17:17:59 UTC 2015
> So in that case, considering the static T or Foo<T> members as belonging
> to a concrete specialization is actually intuitive, at least to me.
We've had this discussion several times before, and still no one is
buying this argument.
Coming from C# (or C++), which have different models for parametric
polymorphism, it might make sense. (Even if Java, it might have been
"intuitive" if we had heterogeneously-translated generics from day one,
but we didn't.) In Java, statics have always been shared across
instantiations (and they predate instantiations). Having them shared
across some instantiations (Foo<String> and Foo<Integer>) but not others
(Foo<Integer> and Foo<int>) would be silly and definitely not intuitive.
Changing the current behavior (making them not shared across any
instantiations) is completely off the table. (Do I even have to say
I understand what you want to express, and I agree its valuable that it
be expressible. But the path you're trying to sell is not the way to
get us there.
More information about the valhalla-dev