3 ms·
If you are using mulitple inheritance to reuse code, you should think twice (even with regular inheritance). Unless there is a meaningful is-a relationship, thi
by astral303 15y ago
If you are using mulitple inheritance to reuse code, you should think twice (even with regular inheritance). Unless there is a meaningful is-a relationship, this is best accomplished via composition.
If you are in the Java world, this is where it pays to switch some classes to Groovy and use its @Delegate annotation. It's a compile-time AST transformation, such that straight-up Java code can take advantage, and it can inject the delegated interfaces into its parent class (so now the class can show up as implementing an interface for the dependency injection framework).
This can be introduced on an as-needed basis (make some files Groovy and the Java code can call them) and Groovy is essentially 95% compatible with identical Java code, so you can usually rename .java to .groovy and be good to go.
- rauar 15y agoI wish Java had no inheritance at all. So many painful moments of misuse, overuse and high coupling and a deep maintenance hell. worst:people think they rock...
- power 15y agoIf you want to stick with just Java, Eclipse can generate the boiler plate for delegation to an object in a couple of clicks.
- eweise 15y ago"If you are using mulitple inheritance to reuse code, you should think twice (even with regular inheritance). Unless there is a meaningful is-a relationship, this is best accomplished via composition." Multiple inheritance is not just for specialization. See http://en.wikipedia.org/wiki/Mixin http://en.wikipedia.org/wiki/Mixin
- vorg 15y ago> If you are in the Java world, this is where it pays to switch some classes to Groovy and use its @Delegate annotation. It's a compile-time AST transformation One of the authors of the @Delegate annotation (http://groovy.codehaus.org/gapi/groovy/lang/Delegate.html http://groovy.codehaus.org/gapi/groovy/lang/Delegate.html) went on to create Groovy++, a statically-typed booster for the dynamic Groovy Language, also working using an AST transformation. Just put @Typed in front of the your package, class, or method, and you'll see speed increases of 10 to 50 times over bare Groovy ( http://code.google.com/p/groovypptest/wiki/Performance http://code.google.com/p/groovypptest/wiki/Performance ). Unfortunately, the developers of Groovy aren't bundling it with their distro of Groovy. You'll need to go direct to http://code.google.com/p/groovypptest/downloads/list http://code.google.com/p/groovypptest/downloads/list , or pick it up from http://groovy.codeplex.com http://groovy.codeplex.com .