The implementation of default methods

David Holmes david.holmes at oracle.com
Sun Dec 16 20:55:04 PST 2012


On 17/12/2012 2:46 PM, Joshua Bloch wrote:
> Complexity meter buried deep in the red.

Any suggestion on how to move it?

David

>      Josh
>
> On Sun, Dec 16, 2012 at 6:39 PM, David Holmes <david.holmes at oracle.com
> <mailto:david.holmes at oracle.com>> wrote:
>
>     On 16/12/2012 1:56 AM, Brian Goetz wrote:
>
>         For Iterator.remove, I think the real constraint is: the JDK must
>         provide *a* default implementation (since this is only an issue for
>         compatibility across JDKs). Since the only reasonable default
>         would be
>         to throw something, we might as well specify what is thrown,
>         since this
>         degree of freedom serves noone: the JDK must provide a default that
>         throws UOE.
>
>
>     One example does not a policy make. We have to address the general
>     issue not, I hope, do a case-by-case analysis to see if we think any
>     other default implementation is possible or reasonable. Put another
>     way do we say:
>
>     "This default implementation does ..."
>
>     or
>
>     "The default implementation does ..."
>
>     ?
>
>
>     On a related but separate note, the "is equivalent to" approach has
>     caused not insignificant confusion over the years because no one
>     knows exactly what it means and then we get bug reports because it's
>     only equivalent in the base class, not in any subclasses (eg we call
>     a private method that 'is equivalent to' calling a bunch of public
>     methods but we don't actually call them so overriding in the
>     subclass doesn't have the expected affect).
>
>     David
>     -----
>
>
>
>         On 12/15/2012 1:50 AM, David Holmes wrote:
>
>             On 15/12/2012 2:45 AM, Doug Lea wrote:
>
>                 On 12/14/12 11:30, Brian Goetz wrote:
>
>                     1. Document "Implementation note: The default
>                     implementation
>                     currently..."
>
>
>                 As always, the fewer of these the better. In j.u/j.u.c,
>                 these
>                 are used mostly for resource limitations (like max
>                 threads in FJP)
>                 that might someday be lifted.
>
>
>                     2. Document "The default implementation behaves as
>                     if..." (Or whatever
>                     Doug's
>                     proposed wording is.)
>
>
>                 In j.u.c, we always say "is behaviorally equivalent to"
>                 but I dropped
>                 the "behaviorally" in Map candidate because someone once
>                 told me
>                 it was overly pedantic :-)
>
>
>                     3. Document "The default implementation MUST"
>
>
>                 Isn't this just the normal spec part, that should
>                 precede the default
>                 implementation part?
>
>
>             I think not. The "normal spec" describes the abstract
>             operation. "The
>             default implementation MUST" specifies the concrete
>             implementation.
>
>             But it sounds like we do not intend to lock in what these
>             default
>             implementations do, so, for example, my version of
>             j.u.Iterator.remove
>             doesn't have to throw UnsupportedOperationException if I
>             have some magic
>             way of providing a default remove operation - correct?
>
>             David
>
>                 -Doug
>
>


More information about the lambda-libs-spec-observers mailing list