Was sind die Gründe, warum man vollqualifizierte Klassennamen im Quellcode verwenden würde?

8

Ich bin kürzlich auf Code gestoßen, bei dem die Entwickler sowohl vollständig qualifizierte Klassennamen als auch importierte Klassennamen in ihrem Quellcode verwendeten.

Beispiel:

import packageA.Foo;

public class Example {
    public packageB.Bar doSomething() {
        final Foo foo = new Foo();
        ...
    }
}

Ich hatte den Eindruck, dass der einzige Grund, warum man einen vollständig qualifizierten Namen für Klassen im Quellcode verwenden möchte, darin besteht, dass sie identische Klassennamen in zwei verschiedenen Paketen haben und den vollständig qualifizierten Namen benötigen, um zwischen den beiden zu unterscheiden. Liege ich falsch?

c_maker
quelle

Antworten:

11

Nein - du hast ganz recht. Die Verwendung vollständig qualifizierter Paketnamen wird normalerweise als schlechter Stil angesehen, es sei denn, es ist erforderlich, Kollisionen zu vermeiden.

Wenn ein Paketname besonders kurz und beschreibend ist, kann die Verwendung qualifizierter Bezeichner den Code aussagekräftiger machen. Das JLS schreibt jedoch für die meisten Pakete domänenbasierte Namen vor, sodass Paketnamen normalerweise nicht kurz und beschreibend sind.

Daniel Lubarov
quelle
Ich benutze immer einen voll qualifizierten Namen, weil ich eine Kollision verhindern kann (wie Sie sagten)
Joe Taras
9

Der andere Grund (außer Kollisionen) wäre, wenn Sie eine Klasse nur einmal benötigen. Dies gilt insbesondere dann, wenn die Klasse eine gemeinsame Schnittstelle implementiert und Sie nur den tatsächlichen Klassennamen für die Instanziierung benötigen. Die Verwendung des vollständig qualifizierten Namens erleichtert das Erkennen, dass hier eine ungewöhnliche Klasse verwendet wird und wo sie zu finden ist (unter der Annahme vernünftiger Namenskonventionen).

List li = new com.foobar.veryspecial.MagicList();
user281377
quelle
Faszinierende Antwort. Ich mag es.
Brandon