On 12/14/2012 01:41 PM, Ricky Clarkson wrote:

Surely a default method that all subclasses are instructed to override just shouldn't exist, right?

Then the compiler will 'instruct' subtypes to implement it automatically (i.e., by failing to compile).

I just wanted to illustrate how a sub-optimal specification of default method behaviour for "optional" methods would sound like if one didn't want to specify that it always throws UnsupportedOperationException ;-)

Peter
On Dec 14, 2012 6:42 AM, "Peter Levart" <peter.lev...@gmail.com <mailto:peter.lev...@gmail.com>> wrote:

    On 12/14/2012 10:06 AM, Peter Levart wrote:
    > On 12/14/2012 07:21 AM, David Holmes wrote:
    >> Paul,
    >>
    >> On 14/12/2012 9:46 AM, Paul Benedict wrote:
    >>> Lance,
    >>>
    >>> Good questions. Someone with authority will surely answer, but
    here's
    >>> my armchair opinion...
    >>>
    >>> If the Javadoc is to specify how the default method executes, than
    >>> that would naturally infer all default implementations must have a
    >>> stated contract. You can't document the default execution
    behavior in
    >>> the public API and then let a provider switch the behavior.
    The two go
    >>> hand-in-hand, imo.
    >>
    >> I couldn't really make sense of that. :) The method has a contract.
    >> The "default implementation" has to honor that contract. The
    question
    >> is whether how the "default implementation" honors the method
    >> contract is required to be part of a second contract.
    >>
    >> I hope that made sense :)
    > I think that the answer is obvious. A default method provider
    has only
    > as much freedom in choosing the implementation of the default method
    > that particular implementation differences among various
    providers are
    > not observable by the "sane" usage of the API. The only soft aspect
    > might be performance. Any other behavioural difference should not be
    > allowed. Otherwise there will be in-compatibilities among platform
    > providers.
    >
    > For example, the default Iterator.remove() is implemented in
    Oracle's
    > JDK as always throwing UnsupportedOperationException. The TCK should
    > test for that and the Javadoc should specify that.
    Ok, I admit that in this particular case and other similar cases
    (where
    the default method does nothing useful), the specification could
    alternatively specify: "The default method behaviour is
    unspecified and
    useless. Don't call that method or make sure it is always
    overridden if
    you call it" - the TCK in that case doesn't test the behaviour of such
    method.

    Peter
    >
    > As Joe said, default interface methods are no different than any
    other
    > overridable methods. They have a contract and behaviour. The
    behaviour
    > can be changed (overriden) within constraints defined by
    contract, but
    > the behaviour itself should also be specified and followed by
    > different providers.
    >
    > Just my 2 cents.
    >
    > Regards, Peter
    >
    >>
    >> David
    >> -----
    >>
    >>
    >>> Paul
    >>>
    >>> On Thu, Dec 13, 2012 at 5:30 PM, Lance Andersen - Oracle
    >>> <lance.ander...@oracle.com <mailto:lance.ander...@oracle.com>>
     wrote:
    >>>>
    >>>> On Dec 13, 2012, at 6:16 PM, Leonid Arbuzov wrote:
    >>>>
    >>>>> Good point, Joe.
    >>>>> Those extra assertions for default methods can be checked
    >>>>> by regular API tests separately from signature tests.
    >>>>
    >>>> I am not clear on this.  See the message attached from David
    which
    >>>> ask a similar question (from the attached email):
    >>>> -------------------
    >>>> 2. It is not obvious to me that the JDK's choice for a default
    >>>> implementation has to be _the_ only possible implementation
    choice.
    >>>> In many/most cases there will be a very obvious choice, but that
    >>>> doesn't mean that all suppliers of OpenJDK classes have to be
    >>>> locked in to that choice.
    >>>> -------------------
    >>>>
    >>>>
    >>>> If everyone needs to implement the same default
    implementation then
    >>>> great the JCK/TCK can test it and IMHO we should have a
    javadoc tag
    >>>> for this.
    >>>>
    >>>> If everyone is free to choose what the default behavior is,
    then we
    >>>> cannot test it.
    >>>>
    >>>> So has there been a decision WRT the requirements for default
    methods?
    >>>>
    >>>>
    >>>> Best
    >>>> Lance
    >>>>> Thanks,
    >>>>> -leonid
    >>>>>
    >>>>> On 12/13/2012 1:05 PM, Joe Darcy wrote:
    >>>>>> Hello,
    >>>>>>
    >>>>>> As with concrete methods on abstract classes, I would
    expect the
    >>>>>> specifications of the default methods to often contain text
    akin
    >>>>>> to "This default implementation does x, y, and z" since if the
    >>>>>> method is to be called by subtypes, the self-use patterns
    in the
    >>>>>> default method need to be known.
    >>>>>>
    >>>>>> Cheers,
    >>>>>>
    >>>>>> -Joe
    >>>>>>
    >>>>>> On 12/13/2012 11:24 AM, Leonid Arbouzov wrote:
    >>>>>>> Hello Lance,
    >>>>>>>
    >>>>>>> My understanding would be that the signature test
    >>>>>>> should check that interface method is marked as default method
    >>>>>>> but do not track the code in its default body
    >>>>>>> (assuming that the body is not a part of a spec - API
    javadoc).
    >>>>>>>
    >>>>>>> (I've confirmed that with the signature test developer)
    >>>>>>>
    >>>>>>> Thanks,
    >>>>>>> -leonid
    >>>>>>>
    >>>>>>> On 12/6/2012 9:01 AM, Lance Andersen - Oracle wrote:
    >>>>>>>> Folks,
    >>>>>>>>
    >>>>>>>> Will the signatures for interfaces that are recorded by the
    >>>>>>>> TCKs for interfaces record the fact that a method includes a
    >>>>>>>> default method? or will it just record the method definition?
    >>>>>>>>
    >>>>>>>> I am assuming it will, but I know there has been discussion
    >>>>>>>> that a implementor could choose a different default
    >>>>>>>> implementation on one of the recent threads that was up for
    >>>>>>>> review.
    >>>>>>>>
    >>>>>>>> I am still trying to understand what our guidelines are,
    if any
    >>>>>>>> for documenting the behavior of the supplied default methods
    >>>>>>>> given the javadocs are part of the specification for many
    APIs
    >>>>>>>> (and in some case the only spec).
    >>>>>>>>
    >>>>>>>> Best
    >>>>>>>> Lance
    >>>>>>>>
    >>>>>>>> Lance Andersen| Principal Member of Technical Staff |
    >>>>>>>> +1.781.442.2037
    >>>>>>>> Oracle Java Engineering
    >>>>>>>> 1 Network Drive
    >>>>>>>> Burlington, MA 01803
    >>>>>>>> lance.ander...@oracle.com <mailto:lance.ander...@oracle.com>
    >>>>>>>>
    >>>>>>>>
    >>>>>>>
    >>>>>>
    >>>>
    >>>>
    >>>>
    >>>> Lance Andersen| Principal Member of Technical Staff |
    +1.781.442.2037 <tel:%2B1.781.442.2037>
    >>>> Oracle Java Engineering
    >>>> 1 Network Drive
    >>>> Burlington, MA 01803
    >>>> lance.ander...@oracle.com <mailto:lance.ander...@oracle.com>
    >>>>
    >>>>
    >>>>
    >>>
    >



Reply via email to