2015-01-15 8 views
6

Der Lehrer in unseren Programmierstunden spricht von "unqualifizierten Namen", aber ich frage mich, was sie wirklich sind.Unqualifizierter Name in Java

Ich vermute, dass Dinge wie Methodennamen nicht qualifiziert sind, aber ich bin mir nicht sicher.

Gibt es jemanden, der mir das erklären kann? Ich muss das wissen, weil ich erklären muss, wie Java einen unqualifizierten Namen sieht.

+0

Dies ist eine hervorragende Stack Overflow-Frage: Sie ist einfach und enthält eine klare Antwort. Nur weil du die Antwort anderswo finden kannst (meiner Meinung nach), heißt das nicht, dass SO keine Antwort haben sollte. Ich habe nicht nachgesehen, ob es ein Duplikat ist. – Thomas

+0

@Thomas Schade, es zeigt keinen Forschungsaufwand. Das ist ein "starker" Grund dafür, dass manche Leute ablehnen. – Tom

+0

Ich bin bei dir; aber der andere Kommentar (den ich markiert habe; gegen den der obige Kommentar geschrieben wurde) war einfach gemein, nicht konstruktiv und gab SO einen schlechten Ruf. – Thomas

Antwort

15

Ein qualifizierter Name ist ein mit einem vollständigen Pfad, z.B .:

java.util.ArrayList list; 

Ein unqualifizierter Name nur den letzten Teil hat:

import java.util.*; 

ArrayList list; 

Der Begriff anwenden kann auch auf Felder und Methoden.


Also, wenn Sie Klassen importieren können, warum sollten Sie jemals einen qualifizierten Namen verwenden?

Sie benötigen es, wenn Sie zwei Klassen verwenden, die denselben Namen haben, obwohl sie aus verschiedenen Paketen stammen. Ein klassisches Beispiel ist das lächerlich namens Klasse aus dem JDK: Es ist recht häufig müssen Verweise auf Instanzen von Klasse

java.sql.Date 

die übrigens

java.util.Date 

erweitert, so dass Sie Code benötigen, die wie folgt aussieht:

public void process(java.util.Date fromDate) { 
    RowSet rows = <run query with fromDate as parameter> 
    while (rows.nsxt()) { 
     java.sql.Date date = rows.getDate(1); 
     // code that needs date 
    } 
} 

Wenn Sie zwei gleichnamige Klassen verwenden, vermeiden Sie es nicht, mindestens eines zu qualifizieren - Sie können eines importieren, aber wenn Sie beides importieren, entsteht eine Mehrdeutigkeit.

5

Ein qualifizierter Name in Java enthält das spezifische Paket, aus dem die Klasse, die Schnittstelle, die Enumeration oder das Feld stammt.

Beispiel: java.util.ArrayList ist ein vollständig qualifizierter Name.

Ein nicht qualifizierter Name ist einfach die Klasse, Schnittstelle, enum oder Feld ohne Paketinformation.

Beispiel: ArrayList

+4

Wir müssen Zwillinge bei der Geburt getrennt sein ... – Bohemian

2

Zum Beispiel com.yourcompany.domain.Person ist die vollständig qualifizierten Klassennamen und Person ist der Klassenname oder unqualifizierte Klassennamen.

1

Qualified Name:org.springframework.jdbc.core.JdbcTemplate
Es Paketnamen hat org.springframework.jdbc.core dann Klassenname JdbcTemplate

unqualifizierte Name:JdbcTemplate Es ist nur Klassenname nicht Paketnamen haben.

Zum Beispiel: Der qualifizierte Name ist die vollständige Adresse Ihres Hauses und der unqualifizierte Name ist nur Ihr Name.

0

das Gespräch Hinzufügen von einem Stück, das nicht erwähnt, noch (und das ist nicht direkt gefragt, aber ich glaube, ist ein hilfreiches adendum des Gespräch):

Alle Namen in Java erfordern Qualifikation; Einige sind jedoch so wichtig für die Java-Operation, dass sie als "in der Klasse", die Sie codieren (oder import ed), angenommen werden. Liskov (2000) gibt ein gutes Beispiel dafür: java.lang - die Klasse, die solche Objekte wie String enthält.

Sie werden oft unqualifizierte Namen in Java sehen. Dies hängt oft mit dem Speicherort einer Klasse oder Methode in Bezug auf die Klasse zusammen, in der Sie versuchen, darauf zuzugreifen (dasselbe Paket). Oben haben andere Poster das Konzept von packages in Java erwähnt.

Pakete ermöglichen es Ihnen, Kollisionen zu benennen - oder besser zu verhindern. Jedes Paket in einem Programm kann die Klassennamen usw. eines anderen Pakets duplizieren. In diesem Fall werden vollständig qualifizierte Namen verwendet, um auf die korrekte Klasse zuzugreifen (wie es in anderen Antworten zu sehen ist). Sie können auch ein Paket importieren, um zu vermeiden, dass der vollständig qualifizierte Name verwendet wird. Sollten zwei importierte Klassen jedoch eine Namenskollision enthalten, haben Sie ein kleines Problem.

+0

Nicht qualifizierte Namen werden auch verwendet, wenn die Fälle einer switch() - Struktur mit vordefinierten Enum-Konstanten ausgewertet werden. –