Was bedeutet der Begriff "kanonische Form" oder "kanonische Repräsentation" in Java?
Ich habe oft gehört, dass dieser Begriff verwendet wird, aber ich habe es nie wirklich verstanden.
Was bedeutet das, und kann jemand ein paar Beispiele nennen/zeigen Sie mir einige links?
EDIT: vielen Dank an alle für die Antworten. Können Sie mir auch sagen, wie die kanonische Darstellung ist nützlich bei der equals () - Leistung, wie dies in der Effektiven Java?
InformationsquelleAutor der Frage Shivasubramanian A | 2008-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wikipedia Punkte, um den Begriff Kanonisierung.
Den Unicode Beispiel machte am meisten Sinn für mich:
In Zusammenfassung, eine standard-Darstellungsform für die Daten. Über dieses Formular können Sie dann zu konvertieren, um eine Vertretung, die Sie benötigen.
InformationsquelleAutor der Antwort Brian Gianforcaro
Ich glaube, es gibt zwei Verwandte Verwendungen von canonical: Formen und Instanzen.
Einen kanonische form bedeutet, dass die Werte von einem bestimmten Typ von Ressource beschrieben werden kann oder vertreten mehrere Möglichkeiten, und eine dieser Möglichkeiten gewählt wird als die bevorzugte kanonische form. (Das Formular ist heiligwie Bücher, die in der Bibel, und die anderen Formen nicht.) Ein klassisches Beispiel für eine kanonische form ist, Wege in ein hierarchisches Datei-system, wo eine einzelne Datei, auf die verwiesen werden kann in eine Reihe von Möglichkeiten:
Die klassische definition der kanonischen Darstellung, die Datei wäre der Letzte Weg. Mit lokalen oder relativen Pfadangaben können Sie nicht Global identifizieren die Ressource ohne Kontextinformationen. Mit absoluten Pfaden können Sie identifizieren die Ressource, kann aber nicht sagen, wenn zwei Pfade beziehen sich auf die gleiche Entität. Mit zwei oder mehr Pfade konvertiert Ihre kanonischen Formen, die Sie tun können, alle oben genannten, plus bestimmen, wenn zwei Ressourcen identisch sind oder nicht, wenn das wichtig ist Ihre Anwendung (lösen das aliasing-problem).
Beachten Sie, dass die kanonische form einer Ressource ist nicht eine Qualität dieser besonderen form sich selbst; es kann mehrere mögliche kanonische Formen für ein und denselben Typ wie die Datei-Pfade (sagen, lexikographisch zunächst möglich, absolute Pfade). Die eine form ist genauso ausgewählt wie die kanonische form für eine bestimmte Anwendung Grund, oder vielleicht willkürlich, so dass jeder spricht die gleiche Sprache.
Zwingt die Objekte in Ihre kanonischen Instanzen ist die gleiche Grundidee, aber anstelle der Bestimmung einer "besten" Repräsentation der Ressource, der es willkürlich wählt eine Instanz einer Klasse von Instanzen mit dem gleichen "Inhalt" wie die kanonische Referenz, dann wandelt alle Referenzen auf entsprechende Objekte zu verwenden, die eine kanonische Instanz.
Dies kann verwendet werden, als eine Technik zur Optimierung von Zeit und Raum. Wenn es mehrere Instanzen von gleichwertigen Objekten in einer Anwendung, dann zwingen Sie alle aufgelöst werden, als die einzige kanonische Instanz von einem bestimmten Wert, können Sie beseitigen alle, aber einer von jedem Wert, sparen Platz, und möglicherweise Zeit, da kann man nun vergleichen Sie diese Werte mit Referenz-Identität (==) im Gegensatz zu den Objekt-äquivalenz (
equals()
- Methode).Ist ein klassisches Beispiel für die Optimierung der Leistung mit kanonischen Instanzen kollabiert strings mit dem selben Inhalt. Aufruf
String.intern()
auf zwei Saiten mit der gleichen Zeichenfolge ist garantiert wieder den gleichen kanonischen String-Objekt für diesen text. Wenn Sie übergeben alle Ihre Saiten durch, dass canonicalizer, wissen Sie entspricht Saiten sind eigentlich identische Objektreferenzen, d.h., AliaseDen enum-Typen in Java 5.0+ Kraft alle Instanzen eines bestimmten enum-Wert zu verwenden, der gleiche kanonische Instanz in einer VM, selbst wenn der Wert serialisiert und deserialisiert werden. Das ist, warum Sie verwenden können
if (day == Days.SUNDAY)
ungestraft in java, wennDays
ist ein enum-Typ. Tun dies für Ihre eigenen Klassen ist durchaus möglich, braucht aber Pflege. Lesen Effektive Java - von Josh Bloch für details und Beratung.InformationsquelleAutor der Antwort Dov Wasserman
Ein gutes Beispiel für das Verständnis der "kanonischen form/Darstellung" ist der Blick auf die XML-schema-Datentyp-definition von "boolean":
{true, false, 1, 0}
in der Erwägung, dass{true, false}
Dies ist im wesentlichen bedeutet, dass
"true"
und"1"
bekommen zugeordnet, um die kanonische repr."true"
und"false"
und"0"
Holen zugeordnet canoncial repr."false"
sehen die w3 XML-schema-Datentyp-definition für boolean
InformationsquelleAutor der Antwort Michael Marton
Das Wort "kanonisch" ist nur ein synonym für "standard" oder "üblich". Es muss nicht jeder Java-spezifische Bedeutung.
InformationsquelleAutor der Antwort Dónal
reduziert auf das einfachste und wichtigste form ohne Verlust der Allgemeingültigkeit
InformationsquelleAutor der Antwort Jaime
Einen einfachen Weg, sich zu erinnern, es ist die Art und Weise "canonical" ist in theologischen Kreisen, kanonische Wahrheit ist die wirkliche Wahrheit, also, wenn sich zwei Menschen finden, die Sie gefunden haben, die gleiche Wahrheit. Gleiche mit kanonischen Instanz. Wenn Sie denken, Sie gefunden haben, zwei von Ihnen (d.h. auch von
a.equals(b)
) Sie wirklich nur ein (d.h.a == b
). So war die Gleichheit impliziert Identität im Falle der kanonischen Objekt.Nun für den Vergleich. Sie haben nun die Möglichkeit, mit
a==b
odera.equals(b)
da Sie produzieren die gleiche Antwort im Falle der kanonischen Instanz, aber a==b ist der Vergleich der Referenz (die JVM kann den Vergleich von zwei zahlen extrem schnell, da Sie nur zwei 32 bit-Muster im Vergleich zua.equals(b)
ist eine Methode aufrufen, und erfordert mehr Aufwand.InformationsquelleAutor der Antwort Chris Mawata
Weiteres gutes Beispiel wäre: Sie haben eine Klasse, die unterstützt die Verwendung von kartesischen (x, y, z), kugelförmig (r, theta, phi) und zylindrischen Koordinaten (r, phi, z). Für die Zwecke der Herstellung von Gleichheit (equals-Methode), würden Sie wahrscheinlich wollen, um zu konvertieren alle Darstellungen auf eine "kanonische" Darstellung Ihrer Wahl, z.B. sphärische Koordinaten. (Oder vielleicht würden Sie wollen, dies zu tun in der Regel - d.h. verwenden Sie eine interne Darstellung.) Ich bin kein Experte, aber das hat mir vorkommen, als vielleicht ein guter konkretes Beispiel.
InformationsquelleAutor der Antwort Kimberley Coburn
kanonische Repräsentation bedeutet Blick den Charakter in verschiedenen Stil
zum Beispiel, wenn ich einen Brief schreiben, Ein Mittel, eine andere person schreiben die Buchstaben " A " im anderen Stil:)
Dies ist nach OPTICAL CHARACTER RECOGNITION FELD
InformationsquelleAutor der Antwort
Eine kanonische form bedeutet natürlich einzigartige Darstellung des Elements
InformationsquelleAutor der Antwort Maksym Ovsianikov