¿Existe un auto
tipo de variable en Java como el que tiene en C ++?
Un ejemplo:
for ( auto var : object_array)
std::cout << var << std::endl;
for( auto var : object_array)
var.do_something_that_only_this_particular_obj_can_do();
Sé que hay un bucle for mejorado en Java, pero ¿hay un auto? Si no es así, ¿hay algún truco para hacer esto? Me refiero a la nueva característica en C ++ 11
Object
, por lo que para algunas operaciones, puede usarObject
donde deseeauto
.to_string
función del objeto y no el objeto real en cuestión, ¿no es así?Respuestas:
Respondido antes de que la pregunta fuera EDITADA :
No, no hay ningún
auto
tipo de variable en Java. El mismo bucle se puede lograr como:Java tiene variables locales, cuyo alcance está dentro del bloque donde se han definido. Similar a C y C ++, pero no hay una palabra clave automática o de registro. Sin embargo, el compilador de Java no permitirá el uso de una variable local inicializada no explícitamente y dará un error de compilación (a diferencia de C y C ++ donde el compilador generalmente solo dará una advertencia). Cortesía: Wikipedia .
No, no hay ninguna inferencia de tipo convencional en Java como C ++. Hubo una RFE pero se cerró como "No se arreglará", la razón dada fue:
fuente
Object
) no se pueden hacer de esta manera. Esta no es realmente una buena respuesta, solo funciona porque el ejemplo de la pregunta es débil.auto
en C y pre-C ++ 11. Tu edición está fuera de tema.var
es una palabra clave reservada desde Java 9.Podría ser que Java 10 tenga lo que tú (y yo) queremos, a través de la
var
palabra clave.De las propuestas de mejora del JDK 286
Actualización: ¡ Sí, esa característica se incorporó a la versión Java 10!
fuente
var
no es una palabra clave! De JLS : "var no es una palabra clave, sino más bien un identificador con un significado especial como el tipo de declaración de variable local". Por lo tanto, a diferencia de las palabras clave, no hay nada que le impida llamar a una variable o método "var".var
hecho no está en la lista de palabras clave.Java 7 presenta la sintaxis de diamante
En comparación con el antiguo java
El lector crítico notará que esta nueva sintaxis no ayuda a escribir los bucles for en la pregunta original. Eso parece correcto y totalmente intencional. Vea la otra respuesta que cita la base de datos de errores de Oracle.
fuente
auto integerBox = new Box<Integer>();
esto se usa generalmente para obtener un valor de retorno de funciones que a veces se pueden complejar comoHashMap<String, LinkedList<Operation, Set<Integer>>>
En Java 8, puede usar la inferencia de tipo lambda para evitar declarar el tipo. El análogo a los ejemplos del interrogador sería:
ambos también se pueden simplificar utilizando referencias de métodos:
fuente
En resumen, no, no hay tipo automático. Sin embargo, si todo lo que está haciendo es imprimir el valor, puede referirse al valor como un archivo
Object
.fuente
hashCode
, o recopilación de nombres de clases, o ... ya se te ocurrió la idea;) Sin embargo, la lista es corta. Consulte los documentos de la clase de objetos (comentario destinado a principiantes, estoy seguro de que lo sabía SimonC)No es una solución pura de Java, sin embargo, agregar una biblioteca llamada lombok permitirá que la magia siguiente se compile y funcione de manera muy similar a la
auto
palabra clave en C ++fuente