C'est la bonne réponse et j'ajouterais seulement ce que vous avez impliqué: non, il n'y a pas une telle syntaxe d'alias en Java.
Sean Owen
19
Est-ce toujours une limitation dans Java 8?
HairOfTheDog
8
@HairOfTheDog Nope, malheureusement aucun alias d'importation n'a été ajouté dans Java8
AdrieanKhisbe
12
Ouais je suis d'accord avec ton commentaire linuxdan ... Java a fait le chemin du dinosaure en termes de mises à jour de sa syntaxe.
Kevin Parker
6
@Bozho Le python ainsi fait: import [fully-qualified-name] as [ident]. Le « comme » mot - clé ne semble pas correspondre à Java, ainsi, une alternative est à peu près ce que C # utilisations: import [ident] = [fully-qualified-name].
Daniel H
60
Comme les autres réponses déjà mentionnées, Java ne fournit pas cette fonctionnalité.
Ce n'est pas une demande déraisonnable, bien que peu essentielle. L'utilisation occasionnelle de noms pleinement qualifiés n'est pas un fardeau indu (à moins que la bibliothèque ne réutilise vraiment les mêmes noms simples à droite et à gauche, ce qui est un mauvais style).
En tout état de cause, il ne passe pas la barre des prix / performances pour un changement de langue.
Donc je suppose que nous ne verrons pas cette fonctionnalité dans Java de si tôt :-P
Hou la la! vous ne plaisantiez pas sur "pas (...) de sitôt", je vois que la demande de fonctionnalité a été rejetée comme du sucre inutile dès 1998! Et chaque tentative de rouvrir la discussion au cours de ces 18 dernières années s'est échouée sur une référence à cette ancienne décision. Je suppose qu'il serait plus facile de convaincre les développeurs IDE d'implémenter cela comme un masque dans l'éditeur que d'essayer de donner un sens à Oracle.
Superole
2
L'ancien raisonnement est cependant correct - en pratique, ces affrontements se produisent très rarement.
slim
14
Je ne suis pas d'accord que ces affrontements se produisent rarement. L'orientation des objets favorise une dénomination simple. Je peux avoir un employé de classe de deux bibliothèques différentes qui font des choses distinctes avec un employé (par exemple).
Andrei Epure
6
@slim " en pratique, ces affrontements se produisent très rarement ". Je ne comprends pas pourquoi ces situations se produiraient moins fréquemment en java (où vous pouvez avoir plus de 10 000 classes) que dans d'autres langues (où vous avez généralement moins de classes) qui prennent en charge cette syntaxe "sucre".
Alain Pannetier
21
Absolument incorrect. Je suis confronté à un scénario très simple qui est probablement très courant et où ce sucre syntaxique serait extrêmement utile. Traduction entre des modèles d'objets liés mais distincts (utilisés respectivement dans des produits liés mais différents) dont les classes partagent la plupart du temps le même nom. Le processus de traduction vous oblige à faire référence aux deux classes dans le même bloc de code. Dans un tel cas (qui doit être très courant), Java rend la vie très difficile. Seul le nombre de vues sur ce post devrait vous raconter l'histoire.
A Scala c'est:import com.example.{Calendar => MyCalendar}
pablisco
24
Et en Kotlin: import com.example.Calendar as MyCalendar.
KevinO
14
En PHP, c'est: utilisez com \ example \ Calendar comme MyCalendar
matang
19
C'est assez ennuyeux de voir que (au moins) 3 langages basés sur la JVM (Groovy, Scala et Kotlin) ont cette fonctionnalité mais Java lui-même n'en a toujours pas ...
Matthias
2
Et quelque chose comme ça class MyCalendar extends com.example.Calendar {}? Ce n'est ni idéal ni joli, mais cela devrait servir la plupart des objectifs, à part, disons, la réflexion. Vous pouvez même l'ajouter avec un commentaire si nécessaire, comme /* import com.example.Calendar as MyCalendar */.
Braden Best
21
Java ne vous permet pas de le faire. Vous devrez vous référer à l'une des classes par son nom complet et importer uniquement l'autre.
En fait, il est possible de créer un raccourci afin que vous puissiez utiliser des noms plus courts dans votre code en faisant quelque chose comme ceci:
De cette façon, vous n'avez besoin de spécifier le nom long qu'une seule fois, et vous pouvez avoir autant de classes spécialement nommées que vous le souhaitez.
Une autre chose que j'aime dans ce modèle est que vous pouvez nommer la classe d'implémentation de la même manière que la classe de base abstraite et la placer simplement dans un espace de noms différent. Cela n'est cependant pas lié au modèle d'importation / renommage.
C'est une très mauvaise solution. Il ne parvient pas à gérer les statistiques, peut nécessiter des mises à jour constantes et n'aide pas avec les problèmes de désérialisation / sérialisation (tels que la désérialisation de xml à jaxb).
Réponses:
Il n'y a pas de mécanisme d'importation d'alias en Java. Vous ne pouvez pas importer deux classes avec le même nom et les utiliser sans réserve.
Importez une classe et utilisez le nom complet pour l'autre, c'est-à-dire
la source
import [fully-qualified-name] as [ident]
. Le « comme » mot - clé ne semble pas correspondre à Java, ainsi, une alternative est à peu près ce que C # utilisations:import [ident] = [fully-qualified-name]
.Comme les autres réponses déjà mentionnées, Java ne fournit pas cette fonctionnalité.
L'implémentation de cette fonctionnalité a été demandée plusieurs fois, par exemple sous la forme JDK-4194542: alias de nom de classe ou JDK-4214789: étendre l'importation pour permettre de renommer le type importé .
D'après les commentaires:
Donc je suppose que nous ne verrons pas cette fonctionnalité dans Java de si tôt :-P
la source
Il est probablement intéressant de noter que Groovy a cette fonctionnalité :
la source
import com.example.{Calendar => MyCalendar}
import com.example.Calendar as MyCalendar
.class MyCalendar extends com.example.Calendar {}
? Ce n'est ni idéal ni joli, mais cela devrait servir la plupart des objectifs, à part, disons, la réflexion. Vous pouvez même l'ajouter avec un commentaire si nécessaire, comme/* import com.example.Calendar as MyCalendar */
.Java ne vous permet pas de le faire. Vous devrez vous référer à l'une des classes par son nom complet et importer uniquement l'autre.
la source
Aujourd'hui, j'ai déposé un projet JEP auprès d'OpenJDK à propos de cette fonction d'alias. J'espère qu'ils le reconsidéreront.
Si vous êtes intéressé, vous pouvez trouver un brouillon JEP ici: https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
la source
En fait, il est possible de créer un raccourci afin que vous puissiez utiliser des noms plus courts dans votre code en faisant quelque chose comme ceci:
De cette façon, vous n'avez besoin de spécifier le nom long qu'une seule fois, et vous pouvez avoir autant de classes spécialement nommées que vous le souhaitez.
Une autre chose que j'aime dans ce modèle est que vous pouvez nommer la classe d'implémentation de la même manière que la classe de base abstraite et la placer simplement dans un espace de noms différent. Cela n'est cependant pas lié au modèle d'importation / renommage.
la source