hlovatt wrote:
> The difference between a Trait and a Mixin is that a Trait application
> is independent of order and also flat and not hierarchical (i.e. just
> like in Java with multiple interfaces), so:
>
> class C1 implements T1, T2 { ... }
>
> is the same as:
>
> class C2 implements T2, T1 { ... }
>
> This is different to a Mixin if T1 and T2 both had the same method,
> int m() say, then with a Mixin C1 would get T2's m and C2 T1's. With a
> Trait it would be an error, since it is ambiguous which one you mean
> and you would have to write:
>
> Class C implements T1, T2 { // or T2, T1 - same thing
> public int m() { return T1.super.m(); } // to get T1 behaviour
> }
>
> This has a bearing on the diamond problem. With a Trait there is no
> hierarchy so:
>
> interface T { int m() { ... } }
> interface Ta extends T { ... } // No new definition of m
> interface Tb extends T { ... } // No new definition of m
> class CTaTb implements Ta, Tb { ... } // No need to define m, it gets
> T.m
>
> and
>
> interface T1a extends T { int m() { ... } }
> class CT1aTb implements T1a, Tb { // Ambiguous, need to define m
> public int m() { return T1a.super.m(); }
>
Any closing piece of the diamond must resolve ambiguities -- and
anything below that in the hierarchy inherits these ambiguity
resolutions. [At least in any reasonable proposal I've seen.] In that
sense things are not "flat".
--
Jess Holle
> Therefore with Traits the rule is, if ambiguous it is an error that
> must be resolved explicitly by the programmer. Note the following is
> not ambiguous, since it is a single inheritance hierarchy:
>
> class CT1a implements T1a { ... } // Gets T1a.m
>
> To me the flat nature and order independence is what everyone is used
> to from Java interfaces and therefore they make a good fit (same goes
> for using the keyword interface - the behaviour is the same).
>
> On Nov 6, 8:43 am, "Peter Becker" <[EMAIL PROTECTED]> wrote:
>
>> I don't like the idea of allowing different access modifiers on
>> interfaces, in fact I don't even like the fact that you can put a
>> "public" in there.
>>
>> For me the different access levels actually define different
>> interfaces already, i.e. a class implicitly defines up to three
>> interfaces for different consumers (public, public+protected,
>> public+protected+package-private) -- four if you count internal
>> consumption. Java didn't invent a notion of an interface, it just made
>> it explicit. Adding access modifiers into Java's interface structures
>> would IMO deviate from the original idea and weaken the whole system.
>> I would rather see something like "class X implements Y protected",
>> although that wouldn't help for traits.
>>
>> For me a trait (I somehow prefer "mixin") is something quite different
>> and much more like a class than an interface. Using interfaces for
>> that purposes would IMO break the conceptual integrety of the Java
>> type system even more; and the loss of abstraction that interfaces
>> provide nowadays seems likely to cause pain later on -- e.g. the
>> classic diamond pattern might get you (although I believe the diamond
>> problem can be solved by enforcing overrides in the bottom class at
>> compile time: everone who derives from two conflicting classes has to
>> provide their own implementation -- brittle without versioned
>> classes/interfaces, but at least it would break in obvious ways).
>>
>> Peter
>>
>>
>>
>> On Wed, Nov 5, 2008 at 2:42 PM, Jess Holle <[EMAIL PROTECTED]> wrote:
>>
>>> I concur. Traits would be a hugely useful addition.
>>>
>>> To make them really sing, however, one needs non-public interface methods.
>>> For instance:
>>>
>>> public interface Foo
>>> {
>>> public void doIt()
>>> {
>>> // default implementation logic implemented in terms of getXInternal()
>>> and/or setXInternal()
>>> }
>>>
>>> protected X getXInternal();
>>> protected void setXInternal(X x);
>>> }
>>>
>>> Either that or one needs to allow interfaces to have fields, which is much
>>> uglier. Having non-public accessors allows one to have virtual fields used
>>> in the default logic which can then be mapped as appropriate as part of
>>> implementing the trait interface.
>>>
>>> --
>>> Jess Holle
>>>
>>> Mark Derricutt wrote:
>>>
>>> Please please please bring on traits! I'm somewhat on the fence of rather
>>> seeing traits than closures in java sooner than the other.
>>>
>>> I'm finding LOTS of places in my code where traits would just make things
>>> cleaner.
>>>
>>> More and more I think I just want scala :)
>>>
>>> On Wed, Nov 5, 2008 at 12:15 PM, hlovatt <[EMAIL PROTECTED]> wrote:
>>>
>>>> I thinks that Traits are a great idea for Java and judging by #215 the
>>>> posse, particularly Dick, like them. I wrote about them for Java 7 in:
>>>>
>>>> http://www.artima.com/weblogs/viewpost.jsp?thread=220916
>>>>
>>>> What do you think?
>>>>
>>> --
>>> "It is easier to optimize correct code than to correct optimized code." --
>>> Bill Harlan
>>>
>> --
>> What happened to Schroedinger's cat? My invisible saddled white dragon ate
>> it.
>>
> >
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The
Java Posse" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---