En Python, vous pouvez faire:
from a import b as c
Comment feriez-vous cela en Java, car j'ai deux importations qui s'affrontent.
En Python, vous pouvez faire:
from a import b as c
Comment feriez-vous cela en Java, car j'ai deux importations qui s'affrontent.
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
import com.text.Formatter;
private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
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:
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
Il est probablement intéressant de noter que Groovy a cette fonctionnalité :
import java.util.Calendar
import com.example.Calendar as MyCalendar
MyCalendar myCalendar = new MyCalendar()
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 */
.
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
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:
package com.mycompany.installer;
public abstract class ConfigurationReader {
private static class Implementation extends com.mycompany.installer.implementation.ConfigurationReader {}
public abstract String getLoaderVirtualClassPath();
public static QueryServiceConfigurationReader getInstance() {
return new Implementation();
}
}
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.