In Python puoi fare un:
from a import b as c
Come lo faresti in Java, dato che ho due importazioni che si scontrano.
In Python puoi fare un:
from a import b as c
Come lo faresti in Java, dato che ho due importazioni che si scontrano.
Risposte:
Non esiste alcun meccanismo di alias di importazione in Java. Non è possibile importare due classi con lo stesso nome e utilizzare entrambe non qualificate.
Importa una classe e usa il nome completo per l'altra, ad es
import com.text.Formatter;
private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
import [fully-qualified-name] as [ident]
. Il “come” parola chiave non sembra per adattarsi in Java e, in alternativa è di circa ciò che # usi C: import [ident] = [fully-qualified-name]
.
Come già indicato nelle altre risposte, Java non fornisce questa funzione.
L'implementazione di questa funzione è stata richiesta più volte, ad esempio come JDK-4194542: aliasing nome classe o JDK-4214789: Estendi importazione per consentire la ridenominazione del tipo importato .
Dai commenti:
Questa non è una richiesta irragionevole, sebbene difficilmente indispensabile. L'uso occasionale di nomi pienamente qualificati non è un onere eccessivo (a meno che la biblioteca non riutilizzi davvero gli stessi nomi semplici a destra e a sinistra, il che è cattivo stile).
In ogni caso, non passa la barra del prezzo / delle prestazioni per un cambio di lingua.
Quindi suppongo che non vedremo presto questa funzione in Java :-P
Vale probabilmente la pena notare che Groovy ha questa funzione :
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 {}
? Non è l'ideale o carino, ma dovrebbe servire la maggior parte degli scopi a meno, per esempio, della riflessione. Puoi anche anteporre un commento se necessario, come /* import com.example.Calendar as MyCalendar */
.
Oggi ho presentato una bozza JEP a OpenJDK su questa funzione di aliasing. Spero che lo riconsiderino.
Se sei interessato, puoi trovare una bozza JEP qui: https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
In realtà è possibile creare un collegamento in modo da poter usare nomi più brevi nel codice facendo qualcosa del genere:
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();
}
}
In questo modo devi solo specificare il nome lungo una volta e puoi avere tutte le classi con nomi speciali che desideri.
Un'altra cosa che mi piace di questo modello è che puoi nominare la classe di implementazione uguale alla classe di base astratta e posizionarla in uno spazio dei nomi diverso. Ciò non è correlato al modello di importazione / ridenominazione.