Static fields in specialized classes
Brian Goetz
brian.goetz at oracle.com
Thu Oct 16 00:11:51 UTC 2014
> Not quite. It is not possible to write code in Java 8 that still works
> in Java 10.
Here's an idea: let's hold off on the "it is not possible" claims until
you've actually seen the whole story.
Addressing your concern, though, we do care deeply about migration
compatibility; it was a huge goal of generics to allow codebases to
generify gradually without requiring a flag day across maintenance
domains. (This is why we still have raw types.) Gradual
any-generification poses a similar requirement, and we will not ignore
the situation of migrating old generic code that didn't know about
any-generics. (We have this very problem with our own Collections,
which are full of leftovers from 5-migration-compatibility like
removeAll(Collection<?>)).
> While a private closed code base can potentially make the
> change you propose when migrating to 10, an open source library can't.
> As an open source author, I need the code I publish to be equally
> usable across multiple Java versions. I can't write <any T> today, so
> it won't work as desired in 10. The "refactor and you're fine"
> argument doesn't work here.
Yeah, this is a problem with every nontrivial new language feature;
that's pretty much independent of anything we've been discussing here.
The good news is that we're working on a separate initiative to ease
this pain, which is felt by all libraries. Historically the approach
libraries have taken is a least-common-denominator one; this was
generally OK because the platform had not been evolving all that fast,
so 5 was a reasonable least-common-denominator for a while. But now
that things are actually evolving again, and people want to actually use
the new features, this becomes important. We see this with libraries
that want to use lambdas as well, but also want to maintain a single
binary artifact. So, stay tuned.
More information about the valhalla-dev
mailing list