Serializable und Transienten
Um eine Klasse serialisierbar machen wir das folgende:
class A implements Serializable {
transient Object a;
}
Und nicht dieses:
serializable class A {
transient Object a;
}
Warum, wenn wir wollen, um eine Klasse serialisierbar, tun wir implementieren eine spezielle Schnittstelle. Und wenn wir wollen, um einige Felder, die wir verwenden, die Stichwort transient
?
Warum nicht spezielle Schlüsselwörter, die in beiden Fällen? Ich meine, gab es irgendwelche Gründe, um die gleiche Sache in unterschiedlicher Weise? Ich weiß, es gibt kein solches keyword als serializable
aber warum wurde das nicht eingeführt, statt der speziellen Schnittstelle Serializable
?
Huh? Ich bin 100% verwirrt... und Ihre Terminologie ist nicht zu helfen. Für den Anfang: wenn Sie wollen eine Klasse serializable, dann haben Sie die Klasse Umsetzung der Schnittstelle
Das würde meen serialisieren, die nur einen Wert nicht?
Aber ich denke, die Frage ist zu Fragen, warum
warum ist dann transient, nicht? Wenn irgendetwas, es muss haben wurden erst später eingeführt, weil Sie kann haben die Serialisierungs-Mechanismus ohne vorübergehende Mitglieder, aber nicht Umgekehrt.
Borgwardt: Gute Frage. Sieht es aus java.sun.com/docs/books/jls/first_edition/html/1.1Update.html, als ob Sie setzen die
Serializable
.Das würde meen serialisieren, die nur einen Wert nicht?
Aber ich denke, die Frage ist zu Fragen, warum
Serializable
fühlt gepfropft auf die Sprache. Und ich denke, die Antwort ist, weil es ist.warum ist dann transient, nicht? Wenn irgendetwas, es muss haben wurden erst später eingeführt, weil Sie kann haben die Serialisierungs-Mechanismus ohne vorübergehende Mitglieder, aber nicht Umgekehrt.
Borgwardt: Gute Frage. Sieht es aus java.sun.com/docs/books/jls/first_edition/html/1.1Update.html, als ob Sie setzen die
transient
Schlüsselwort in der ersten Ausgabe von der Sprache, aber nicht es zu aktivieren, bis Sie Hinzugefügt Serializable
im 1.1.InformationsquelleAutor andrii | 2009-12-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie haben, um es zu betrachten anderen Weg: Schlüsselwörter der Programmiersprache existieren im wesentlichen auf die Unterstützung compile-Zeit-Konstrukte. Die Serialisierung ist ein Laufzeit-Mechanismus. Darüber hinaus werden Sie nicht wollen, ein zusätzliches Schlüsselwort für alles, da können Sie dann nicht verwenden Sie es als ein Bezeichner. Ein marker-interface auf der anderen Seite ist viel weniger aufdringlich.
Die Frage ist also: warum brauchen wir eine Sprache Schlüsselwort zu markieren, transiente Felder? Und die Antwort ist, dass es einfach keine andere Möglichkeit zum markieren bestimmter Felder von damals.
Heutzutage würde man mit Anmerkungen, die für diesen Zweck in beiden Fällen (und auch für andere Dinge, wie die obskuren
strictfp
Stichworten).Wie ich schon sagte: das hinzufügen von keywords zu einer Sprache ist eigentlich etwas, das Sie vermeiden möchten. Mit Klassen, es könnte vermieden werden, indem ein marker-interface statt. Mit Feldern, es gab keine alternative.
Ich habe geklärt, die Frage ein bisschen.
Dies ist die Antwort auf die Frage. Einige Funktion X, die Sie hinzufügen möchten, Sie versuchen zu vermeiden, hinzufügen neuer keywords, unter allen Umständen, wenn es gibt schon Konstrukte zu umgehen. Nur weil Sie Kompromisse machen müssen, auf eine Sache ("transient" in diesem Fall) bedeutet nicht, dass Sie automatisch alles, was sonst noch in ein Schlüsselwort zu.
InformationsquelleAutor Michael Borgwardt
Serializable
ist ein marker-interface. Schnittstellen sind ein standard Weg (in Java und in einigen anderen Sprachen) unter Angabe der Funktionen der Klasse; eine "ist ein" relaionship. MachenSerializable
eine Schnittstelle bedeutet, dass wir erklären können, Methoden, die Sie akzeptieren oder zurückSerializable
s wie können wir die Methoden, die Arbeit mit anderen Schnittstellen. Alles andere wäre erforderlich gewesen, syntax-änderungen auf die Sprache (zu der Zeit; jetzt haben wir Anmerkungen, aber ich denke, eine Schnittstelle wäre noch benutzt werden).Serializable
als parameter oder Rückgabetypen.Warum nicht? Für eine Allgemeine storage oder Kommunikations-Schnittstelle, kann es durchaus Sinn machen, - Ihre Sachen müssen serialisierbar sein sollen, aber das ist alles.
InformationsquelleAutor T.J. Crowder
So fragst du dich, warum können Sie T mark einer Klasse nicht serializable (wie eine transient-Mitglied)? Warum würden Sie nicht nur nicht mark-Klasse-Mitglieder, die nicht zu serialisieren, die Art, wie Transienten? Oder verwenden Sie eine Serialisierung der Delegierten für die Klasse geben, wenn Sie die Serialisierung? Es scheint ein wenig seltsam, dass Sie möchten, zu sagen, Java nicht etwas tun, auf dieser Ebene, anstatt zu sagen, es zu etwas tun.
InformationsquelleAutor spork
Serializable
ist ein marker-interface (wieCloneable
) , wird verwendet, um ein flag für standard-Java-runtime-Bibliothek von code, der ein Objekt sein kann, serialisierte nach dem designer der Klasse.Den
transient
- Schlüsselwort kann verwendet werden, um anzugeben, dass ein Attribut nicht brauchen, um serialisierte, zum Beispiel, weil es ein abgeleitetes Attribut.Siehe auch diese Antwort auf eine ähnliche Frage SO und das man über das entwerfen von marker-interfaces.
Update
Warum marker-interfaces und keine Schlüsselwörter für Dinge wie serializable, cloneable usw? Meine Vermutung wäre die Möglichkeit, konsequent erweitern Sie die Java-runtime-lib mit der neuen marker-interfaces in Kombination mit zu vielen keywords, wenn verhaltensbezogene Aspekte in die Sprache.
Die Tatsache, dass die Attribute der Klasse kann Interfaces implementieren und
transient
gesehen werden kann, als eine Allgemeine Eigenschaft, ein Attribut sinnvoll, die Einführungtransient
als eine Sprache, Schlagwort.InformationsquelleAutor rsp
Transient Schlüsselwörter werden verwendet, um zu schützen, eine variable oder ein Feld gespeichert werden, und wir tun dies, um zu schützen, einige sensible Informationen, die wir gerade nicht wollen, zu verteilen, an jedem Ort und wir nutzen die Serializable-Schnittstelle, um eine Klasse Serialisierbar. Obwohl wir können Externalizable-Schnittstelle auch, aber wir bevorzugen, um Serialisierbar, weil einige Vorteile.
Gehen, obwohl dieser klar zu verstehen, Serialisierung und transient-Schlüsselwort.
http://www.codingeek.com/java/io/object-streams-serialization-deserialization-java-example-serializable-interface/
InformationsquelleAutor Hitesh Garg