1. While language-level extension methods (no JVM involvement) won’t solve the deprecated-method problem, they do solve the Stream<int>.sum problem, and quite elegantly.

Sort of -- but only if you buy the partiality.

In order for this to work, you have to (as .NET does) inject methods into *types*, not into *classes*. This is just a partial method in disguise! In order for this to work, you have to be comfortable with the idea that the set of methods on a given receiver is dependent on the parameterization of the receiver. And you clearly are, since you don't think extension methods are too complex.

FTR, we considered and rejected use-site extension methods in 8, for a philosophical reason that is still equally valid here: an API developers should own their API. What we rejected is the use-site aspect of it; the part we actually liked (but didn't have enough motivation to embrace in 8) was the partiality. Just as default methods support the after-the-fact aspect of API extension that use-site extension would (without the transparency risks), partial methods (including partial defaults) support the specialized-receiver aspect of extension methods that we like but don't yet have.


Reply via email to