| 

.NET C# Java Javascript Exception

Groovy's Pendant zu Scala's Traits?

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Groovy's Pendant zu Scala's Traits?

mvonbihl - 15.10.2010 10:37
Hallo zusammen,

bietet Groovy ein Konstrukt ähnlich wie Scala's Traits an?

Categories habe ich mir schon ein wenig angeschaut, jedoch ist mir folgendes aufgefallen:

class Vehicle {
    String name
}

@Category(Vehicle) class FlyAbility {
    String maxSpeed
    def fly() { "Ich heisse: ${name} und fliege" }
}

@Mixin(FlyAbility)
class Plane extends Vehicle {
    String name
}

def plane = new Plane(name: "Concorde", maxSpeed: 500)
println plane.fly()
println plane.maxSpeed

führt zur Ausgabe:
Ich heisse: Concorde und fliege
500


Wenn ich nun die Methode fly() ändere (ich möchte auf maxSpeed zugreifen):

def fly() { "Ich heisse: ${name} und fliege ${maxSpeed}" }

bekomme ich eine Exception:
java.lang.VerifyError: (class: FlyAbility, method: fly signature: (LVehicle;)Ljava/lang/Object;) Incompatible type for getting or setting field

Wieso kann ich in Categories nicht auf "Klassenattribute" zugreifen?


Re: Groovy's Pendant zu Scala's Traits?

Wicki - 15.10.2010 13:59
Hallo,

wenn Du in der fly-Methode
this.maxSpeed
formulierst funktioniert das.
Ich kann es mir nur so erklären:
Im Kommentar der Category-Annotation heißt es
"during compilation, all methods are transformed to static ones ..."
und weiter:
"Properties invoked using 'this' references are transformed ..."
Das bedeutet also Methoden und Attribute haben den gleichen Modifier 'static'.
Das erklärt auch, daß es ohne "this." geht, wenn Du "static String maxSpeed"
definierst.

Gruß Wicki


Re: Groovy's Pendant zu Scala's Traits?

mvonbihl - 15.10.2010 14:29
vielen Dank für die Info.


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Groovy's Pendant zu Scala's Traits?" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.