web-dev-qa-db-fra.com

Modifier le nom de l'importation en Java ou importer deux classes du même nom

En Python, vous pouvez faire un:

from a import b as c

Comment feriez-vous cela en Java, car j'ai deux importations qui s'affrontent.

317
Federer

Il n'y a pas de mécanisme d'alias d'importation en Java. Vous ne pouvez pas importer deux classes du même nom et les utiliser toutes les deux sans réserve.

Importez une classe et utilisez le nom complet de l’autre, c.-à-d.

import com.text.Formatter;

private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
412
Bozho

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()
55
sfussenegger

Comme les autres réponses l'ont déjà indiqué, Java ne fournit pas cette fonctionnalité.

L'implémentation de cette fonctionnalité a été demandée plusieurs fois, par exemple as JDK-4194542: aliasing du nom de classe ou JDK-4214789: Importation étendue pour permettre de renommer un type importé .

D'après les commentaires:

Ce n’est pas une demande déraisonnable, bien qu’à peine indispensable. L'utilisation occasionnelle de noms qualifiés complets ne constitue pas une charge excessive (à moins que la bibliothèque ne réutilise réellement les mêmes noms simples à droite et à gauche, ce qui est un mauvais style).

En tout état de cause, cela ne dépasse pas la barre prix/performance pour un changement de langue.

Donc, je suppose que nous ne verrons pas cette fonctionnalité dans Java de si tôt :-P

53
siegi

Java ne vous permet pas de faire cela. Vous aurez besoin de faire référence à l'une des classes par son nom complet et d'importer uniquement l'autre.

18
sepp2k

Aujourd'hui, j'ai déposé un projet de PEC auprès d'OpenJDK à propos de cette fonctionnalité de repliement du spectre. J'espère qu'ils vont le reconsidérer.

Si cela vous intéresse, vous pouvez trouver un brouillon JEP ici: https://Gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7

0
cardil