Angenommen, ich habe einen Code wie:
import java.util.Date;
import my.own.Date;
class Test{
public static void main(String [] args){
// I want to choose my.own.Date here. How?
..
// I want to choose util.Date here. How ?
}
}
Sollte ich voll qualifizierte Klassennamen sein? Kann ich die Importanweisungen entfernen? Ist ein solches Szenario in der realen Programmierung üblich?
Antworten:
Sie können die Importanweisungen weglassen und über den gesamten Pfad auf sie verweisen. Z.B:
Aber ich würde sagen, dass die Verwendung von zwei Klassen mit demselben Namen und einer ähnlichen Funktion normalerweise nicht die beste Idee ist, es sei denn, Sie können wirklich klarstellen, welche welche ist.
quelle
your.own.Date
mit Strg + Umschalt + R ändern . Dies ändert sich automatisch überall dort, wo Sie in Ihrem Code darauf verweisen, sowie in der Datei (und dem Dateinamen) Ihrer / own / Date.java. Jede andere IDE hat wahrscheinlich eine ähnliche Funktion.Date
ist dies der perfekte Name. Sie werden es in den meisten Ihrer Codes verwenden. Manchmal müssen Sie jedoch insbesondere anrufenjava.util.Date
, um Konvertierungen zwischen beiden durchzuführen.org.apache.log4j.Logger
und aufjava.util.logging.Logger
. Normalerweise habe ich keine Kontrolle über die eine oder andere Seite; Ich mache Legacy-Code-Integration.Verwenden Sie den vollständig qualifizierten Namen, anstatt die Klasse zu importieren.
z.B
quelle
Ja, wenn Sie Klassen mit denselben einfachen Namen importieren, müssen Sie sie mit ihren vollständig qualifizierten Klassennamen referenzieren. Ich würde die import-Anweisungen belassen, da sie anderen Entwicklern einen Eindruck davon vermitteln, was in der Datei enthalten ist, wenn sie damit arbeiten.
quelle
Eine andere Möglichkeit ist die Unterklasse:
Importieren Sie dann my.own.FQNDate in Pakete mit java.util.Date.
quelle
Matchers
und MockitoMatchers
in derselben Klasse verwenden möchte . Es scheint mit statischen Methoden zu funktionieren..when
s,.thenReturn
s usw. - entfernt dasMockito.
Aufblähen.Wenn Sie eine eigene Datumsklasse haben, sollten Sie diese von der integrierten Datumsklasse unterscheiden. dh warum hast du deine eigenen erstellt? So etwas wie ImmutableDate oder BetterDate oder NanoDate würde sogar MyDate angeben, warum Sie Ihre eigene Datumsklasse haben. In diesem Fall haben sie einen eindeutigen Namen.
quelle
Sie können eine davon mit import importieren. Für alle anderen ähnlichen Klassen müssen Sie vollständig qualifizierte Klassennamen angeben. Andernfalls wird ein Kompilierungsfehler angezeigt.
Z.B:
quelle
Dieses Szenario ist in der realen Programmierung nicht so häufig, aber auch nicht so seltsam. Es kommt manchmal vor, dass zwei Klassen in verschiedenen Paketen denselben Namen haben und wir beide benötigen.
Es ist nicht zwingend erforderlich, dass wenn zwei Klassen denselben Namen haben, beide dieselben Funktionen enthalten und wir nur eine davon auswählen sollten.
Wenn wir beides brauchen, schadet es nicht, das zu benutzen. Und es ist auch keine schlechte Programmieridee.
Wir sollten jedoch vollständig qualifizierte Namen der Klassen (die denselben Namen haben) verwenden, um zu verdeutlichen, auf welche Klasse wir uns ebenfalls beziehen.
:) :)
quelle
Ich bin auf dieses Problem gestoßen, wenn ich beispielsweise eine Klasse einer anderen zugeordnet habe (z. B. wenn ich zu einer neuen Gruppe von Klassen gewechselt bin, um Personendaten darzustellen). Zu diesem Zeitpunkt benötigen Sie beide Klassen, da dies der springende Punkt des Codes ist - um eine der anderen zuzuordnen. Und Sie können die Klassen an beiden Orten nicht umbenennen (wieder besteht die Aufgabe darin, zuzuordnen, nicht zu ändern, was jemand anderes getan hat).
Voll qualifiziert ist eine Möglichkeit. Es scheint, dass Sie nicht beide Importanweisungen einschließen können, da Java sich beispielsweise Sorgen darüber macht, welche "Person" gemeint ist.
quelle
Wenn Sie wirklich denselben Klassennamen aus zwei verschiedenen Paketen verwenden möchten oder müssen, haben Sie zwei Möglichkeiten:
1 Wählen Sie eine aus, die beim Import verwendet werden soll, und verwenden Sie den vollständig qualifizierten Klassennamen der anderen:
2-Verwenden Sie immer den vollständig qualifizierten Klassennamen:
quelle
Ich hatte nur das gleiche Problem, was ich getan habe, ich habe die Bibliotheksreihenfolge nacheinander angeordnet, zum Beispiel gab es java.lang.NullPointerException und javacard.lang.NullPointerException. Ich habe die erste als Standardbibliothek erstellt. Wenn Sie die andere verwenden müssen, können Sie den vollständigen qualifizierten Klassennamen explizit angeben.
quelle
Wenn Sie Klassen mit demselben Namen aufrufen, müssen Sie das Paket, von dem aus die Klasse aufgerufen wird, explizit angeben.
Sie können dies wie folgt tun:
Ausgabe:
quelle