Esa es la respuesta correcta y a eso solo agregaría lo que ha implicado: no, no hay tal sintaxis de alias en Java.
Sean Owen
19
¿Sigue siendo una limitación en Java 8?
HairOfTheDog
8
@HairOfTheDog Nope, desafortunadamente no se han agregado alias de importación en Java8
AdrieanKhisbe
12
Sí, estoy de acuerdo con tu comentario linuxdan ... Java ha seguido el camino del dinosaurio en términos de actualizaciones a su sintaxis.
Kevin Parker
66
@Bozho La forma de pitón hace: import [fully-qualified-name] as [ident]. El “como” no parece palabra clave para caber en Java, así, una alternativa es aproximadamente lo que # usos C: import [ident] = [fully-qualified-name].
Daniel H
60
Como las otras respuestas ya indicaron, Java no proporciona esta característica.
Esta no es una solicitud irrazonable, aunque difícilmente esencial. El uso ocasional de nombres totalmente calificados no es una carga excesiva (a menos que la biblioteca realmente reutilice los mismos nombres simples a derecha e izquierda, lo cual es un mal estilo).
En cualquier caso, no pasa la barra de precio / rendimiento para un cambio de idioma.
Así que supongo que no veremos esta característica en Java pronto :-P
¡Guauu! no estabas bromeando acerca de "no (...) en el corto plazo", ¡veo que la solicitud de función fue rechazada como azúcar sin sentido desde 1998! Y cada intento de reabrir la discusión durante estos últimos 18 años se ha perdido en una referencia a esa antigua decisión. Supongo que sería más fácil convencer a los desarrolladores de IDE para que implementen esto como una máscara en el editor que tratar de darle sentido a Oracle.
Superole
2
Sin embargo, el viejo razonamiento es correcto: en la práctica, estos enfrentamientos rara vez ocurren.
delgado
14
No estoy de acuerdo en que estos enfrentamientos rara vez ocurren. La orientación a objetos favorece la simple denominación. Puedo tener una clase Empleado de dos bibliotecas diferentes que hacen cosas separadas con un empleado (por ejemplo).
Andrei Epure el
66
@slim " en la práctica, estos enfrentamientos rara vez ocurren ". No es claro por qué estas situaciones se producirían menos frecuencia en java (donde se puede tomar clases 10.000+) que en los otros idiomas (en la que por lo general tienen menos clases), que hacen apoyar esta sintaxis "azúcar".
Alain Pannetier
21
Absolutamente incorrecto Me enfrento a un escenario muy simple que probablemente es muy común y donde este azúcar sintáctico sería extremadamente útil. Traducción entre modelos de objetos relacionados, pero distintos (utilizados en productos relacionados pero diferentes, respectivamente) cuyas clases la mayoría de las veces comparten el mismo nombre. El proceso de traducción requiere que haga referencia a ambas clases en el mismo bloque de código. En tal caso (que debe ser muy común), Java hace la vida muy difícil. Solo la cantidad de visitas en esta publicación debería contarte la historia.
En Scala es:import com.example.{Calendar => MyCalendar}
pablisco
24
Y en Kotlin: import com.example.Calendar as MyCalendar.
KevinO
14
En PHP es: el uso com \ ejemplo \ calendario como MyCalendar
matang
19
Es bastante molesto ver que (al menos) 3 lenguajes basados en JVM (Groovy, Scala y Kotlin) tienen esta característica, pero Java en sí todavía no ...
Matthias
2
¿Qué tal algo así class MyCalendar extends com.example.Calendar {}? No es ideal ni bonito, pero debería servir para la mayoría de los propósitos, excepto, por ejemplo, la reflexión. Incluso podría anteponerlo con un comentario si es necesario, como /* import com.example.Calendar as MyCalendar */.
Braden Best
21
Java no te permite hacer eso. Deberá referirse a una de las clases por su nombre completo y solo importar la otra.
De esa manera, solo necesita especificar el nombre largo una vez, y puede tener tantas clases especialmente nombradas como desee.
Otra cosa que me gusta de este patrón es que puede nombrar la clase implementadora de la misma manera que la clase base abstracta, y simplemente colocarla en un espacio de nombres diferente. Sin embargo, eso no está relacionado con el patrón de importación / cambio de nombre.
Esta es una solución muy pobre. No trata completamente las estadísticas, puede requerir actualizaciones constantes y no ayuda con los problemas de deserialización (como la deserialización de xml a través de jaxb).
Respuestas:
No existe un mecanismo de alias de importación en Java. No puede importar dos clases con el mismo nombre y usar ambas sin calificar.
Importe una clase y use el nombre completo para la otra, es decir
fuente
import [fully-qualified-name] as [ident]
. El “como” no parece palabra clave para caber en Java, así, una alternativa es aproximadamente lo que # usos C:import [ident] = [fully-qualified-name]
.Como las otras respuestas ya indicaron, Java no proporciona esta característica.
La implementación de esta función se ha solicitado varias veces, por ejemplo, como JDK-4194542: alias de nombre de clase o JDK-4214789: Extienda la importación para permitir el cambio de nombre del tipo importado .
De los comentarios:
Así que supongo que no veremos esta característica en Java pronto :-P
fuente
Probablemente vale la pena señalar que Groovy tiene esta característica :
fuente
import com.example.{Calendar => MyCalendar}
import com.example.Calendar as MyCalendar
.class MyCalendar extends com.example.Calendar {}
? No es ideal ni bonito, pero debería servir para la mayoría de los propósitos, excepto, por ejemplo, la reflexión. Incluso podría anteponerlo con un comentario si es necesario, como/* import com.example.Calendar as MyCalendar */
.Java no te permite hacer eso. Deberá referirse a una de las clases por su nombre completo y solo importar la otra.
fuente
Hoy presenté un borrador de JEP a OpenJDK sobre esta función de alias. Espero que lo reconsideren.
Si está interesado, puede encontrar un borrador de JEP aquí: https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
fuente
En realidad, es posible crear un acceso directo para que pueda usar nombres más cortos en su código haciendo algo como esto:
De esa manera, solo necesita especificar el nombre largo una vez, y puede tener tantas clases especialmente nombradas como desee.
Otra cosa que me gusta de este patrón es que puede nombrar la clase implementadora de la misma manera que la clase base abstracta, y simplemente colocarla en un espacio de nombres diferente. Sin embargo, eso no está relacionado con el patrón de importación / cambio de nombre.
fuente