2010-10-14 9 views
11

Je suis en train de comprendre la différence entreDifférence entre Groovy def et Java Object?

Groovy:

def name = "stephanie" 

Java:

Object name = "stephanie" 

que les deux semblent agir comme des objets qui d'interagir avec eux je dois jetez-les à leur type prévu original.

J'étais à l'origine sur la recherche d'un équivalent Java de classe dynamique de C# (Java equivalent to C# dynamic class type?) et il a été suggéré de regarder Groovy def

par exemple mon impression de définition de Groovy est que je pouvais faire ce qui suit:

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

mais cette coutume construit

merci, steph

Solu edit: Il s'avère que j'ai eu une classe groovy avec des propriétés publiques (dans mon exemple ci-dessus DOB) définie avec def mais essayait alors d'y accéder à partir d'une classe .java (dans mon exemple ci-dessus appelant .getYear() dessus). C'est une erreur de débutant mais le problème est qu'une fois que l'objet quitte un fichier Groovy, il est simplement traité comme un objet. Merci pour votre aide!

+0

Lorsque vous dites 'this wont build', avez-vous une exception? –

Répondre

16

En soi, il n'y a pas beaucoup de différence entre ces deux instructions; mais comme Groovy est un langage dynamique, vous pouvez écrire

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

alors que vous auriez besoin d'une distribution explicite dans la version Java

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

Pour cette raison, def fait beaucoup de sens plus Groovy que l'utilisation non fondée de Object en Java.

+0

mon espoir original était que def performaed de cette façon mais quand j'ai essayé quelque chose comme: 'def DOB = nouvelle Date (1999,5,2); dob.getYear(); ' il ne me laissera pas construire –

+1

et puis les exceptions d'exécution ont coulé ... – hvgotcodes

+0

J'ai juste essayé votre exemple de .toUtils et cela ne m'autorisera pas à construire .. suis-je manquant un arrangement de compilateur ou quelque chose? J'utilise netbeans 6.9.1 –

Questions connexes