In Python können Sie Folgendes ausführen:
from a import b as c
Wie würden Sie dies in Java tun, da ich zwei Importe habe, die zusammenstoßen.
In Python können Sie Folgendes ausführen:
from a import b as c
Wie würden Sie dies in Java tun, da ich zwei Importe habe, die zusammenstoßen.
Antworten:
In Java gibt es keinen Import-Aliasing-Mechanismus. Sie können nicht zwei Klassen mit demselben Namen importieren und beide nicht qualifiziert verwenden.
Importieren Sie eine Klasse und verwenden Sie den vollständig qualifizierten Namen für die andere, d. H.
import com.text.Formatter;
private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
import [fully-qualified-name] as [ident]
. Das Schlüsselwort "as" scheint nicht auch in Java zu passen. Eine Alternative ist ungefähr das, was C # verwendet : import [ident] = [fully-qualified-name]
.
Wie in den anderen Antworten bereits erwähnt, bietet Java diese Funktion nicht an.
Die Implementierung dieser Funktion wurde mehrfach angefordert, z. B. als JDK-4194542: Aliasing von Klassennamen oder JDK-4214789: Import erweitern, um das Umbenennen des importierten Typs zu ermöglichen .
Aus den Kommentaren:
Dies ist keine unangemessene, wenn auch kaum notwendige Bitte. Die gelegentliche Verwendung voll qualifizierter Namen ist keine unangemessene Belastung (es sei denn, die Bibliothek verwendet dieselben einfachen Namen rechts und links wirklich wieder, was ein schlechter Stil ist).
In jedem Fall wird die Preis- / Leistungsgrenze für einen Sprachwechsel nicht überschritten.
Ich denke, wir werden diese Funktion in Kürze nicht mehr in Java sehen :-P
Es ist wahrscheinlich erwähnenswert, dass Groovy diese Funktion hat :
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 {}
? Es ist nicht ideal oder hübsch, aber es sollte den meisten Zwecken dienen, beispielsweise nicht der Reflexion. Sie können es bei Bedarf sogar mit einem Kommentar voranstellen, z /* import com.example.Calendar as MyCalendar */
.
Heute habe ich OpenJDK einen JEP-Entwurf zu dieser Aliasing-Funktion vorgelegt. Ich hoffe, sie werden es noch einmal überdenken.
Wenn Sie interessiert sind, finden Sie hier einen JEP-Entwurf: https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
Tatsächlich ist es möglich, eine Verknüpfung zu erstellen, damit Sie kürzere Namen in Ihrem Code verwenden können, indem Sie Folgendes tun:
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();
}
}
Auf diese Weise müssen Sie den langen Namen nur einmal angeben, und Sie können so viele speziell benannte Klassen haben, wie Sie möchten.
Eine andere Sache, die ich an diesem Muster mag, ist, dass Sie die implementierende Klasse genauso wie die abstrakte Basisklasse benennen und sie einfach in einem anderen Namespace platzieren können. Dies hängt jedoch nicht mit dem Import- / Umbenennungsmuster zusammen.