2010-10-14 20 views
11

estoy tratando de averiguar la diferencia entre¿Diferencia entre Groovy def y Java Object?

maravilloso:

def name = "stephanie" 

Java:

Object name = "stephanie" 

ya que ambos parecen actuar como objetos en que interactúen con ellos tengo que echarlos a su tipo original previsto.

estaba originalmente en la búsqueda de un equivalente Java de clase dinámica C# 's (Java equivalent to C# dynamic class type?) y se sugirió a la vista del maravilloso def

por ejemplo, mi impresión de la DEF del maravilloso es que yo podría hacer lo siguiente:

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

esta costumbre construir

gracias, Steph

Solu edición de edición: Resulta que el error es que hice una clase maravillosa con propiedades públicas (en mi ejemplo anterior a la fecha de nacimiento) definida con def pero luego estaba tratando de acceder a ellas desde una clase .java (en mi ejemplo anterior llamando a .getYear() en eso). Es un error de novato, pero el problema es que una vez que el objeto deja un archivo Groovy simplemente se trata como un Objeto. ¡Gracias por toda tu ayuda!

+0

Cuando dices 'this wont build', ¿tienes una excepción? –

Respuesta

16

Per se, no hay mucha diferencia entre esas dos declaraciones; pero desde Groovy es un lenguaje dinámico, puede escribir

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

mientras que se necesita una conversión explícita en la versión de Java

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

Por esa razón, def tiene mucho más sentido en el maravilloso que el uso de fundamento de Object en Java.

+0

mi esperanza original era que def se ejecutara de esa manera pero cuando probé algo como: 'def DOB = new Date (1999,5,2); dob.getYear(); ' no me deja construir –

+1

y luego fluyeron las excepciones de tiempo de ejecución ... – hvgotcodes

+0

Acabo de probar tu ejemplo de .toUppercase y eso tampoco me permite construir ... ¿me falta una configuración de compilador o algo así? Estoy usando netbeans 6.9.1 –

Cuestiones relacionadas