2010-10-14 15 views
11

Ich versuche, den Unterschied zwischenUnterschied zwischen Groovy Def und Java Object?

Groovy, um herauszufinden:

def name = "stephanie" 

Java:

Object name = "stephanie" 

als beide scheinen als Objekte, dass mit ihnen zu interagieren i zu handeln müssen Wirf sie auf ihren ursprünglichen Typ.

Ich war ursprünglich auf der Suche nach einem Java-Äquivalent von C# 's dynamischer Klasse (Java equivalent to C# dynamic class type?) und es wurde vorgeschlagen, die bei Groovy def

zum Beispiel von def abgefahrenen meinem Eindruck zu sehen ist, dass ich folgendes tun könnte:

def DOB = new Date(1998,5,23); 
int x = DOB.getYear(); 

aber diese bauen pflegt

dank, steph

Solu edition: Stellt sich heraus, dass der Fehler bei der Erstellung einer groovigen Klasse mit öffentlichen Eigenschaften (in meinem Beispiel über DOB) mit def definiert wurde, aber dann versuchte, auf sie aus einer .java Klasse zuzugreifen (in meinem obigen Beispiel .getYear() darauf). Es ist ein Anfängerfehler, aber das Problem ist, sobald das Objekt eine Groovy-Datei verlässt, wird es einfach als Objekt behandelt. Danke für deine Hilfe!

+0

Wenn Sie sagen, dass dies nicht funktioniert, haben Sie eine Ausnahme? –

Antwort

16

An sich besteht zwischen diesen beiden Aussagen kein großer Unterschied; aber da Groovy eine dynamische Sprache ist, können Sie

def name = "Stephanie" 
println name.toUpperCase() // no cast required 

schreiben, während Sie eine explizite Umwandlung in der Java-Version

Object name = "Stephanie"; 
System.out.println(((String) name).toUpperCase()); 

Aus diesem Grunde brauchen würde, def macht viel mehr Sinn in Groovy als unbegründet Verwendung von Object in Java.

+0

meine ursprüngliche Hoffnung war, dass def auf diese Weise performte, aber wenn ich etwas versuchte wie: 'def DOB = new Date (1999,5,2); dob.getYear(); ' Es lässt mich –

+1

bauen und dann fließen die Laufzeitausnahmen ... – hvgotcodes

+0

Ich probierte gerade Ihr Beispiel von .toUppercase und das erlaubt mir auch nicht zu bauen .. bin ich eine Compilereinstellung oder etwas? Ich benutze Netbeans 6.9.1 –

Verwandte Themen