Transient

Status
Nicht offen für weitere Antworten.

Johns

Mitglied
Hallo alle,

ich wollte mal nachfragen warum man transient nicht als modifier bei methoden verwenden darf. Bzw. was würde passieren wenn man es doch macht?

gruß

Johns
 
G

Gelöschtes Mitglied 5909

Gast
1. weißt du was transient macht?
2. macht keinen sinn
3. probier es aus -> warscheinlich compile error
 

newcron

Aktives Mitglied
Hallo,
transient bedeutet nichts anderes, als dass der Wert einer Variable beim Serialisieren (die reinen Binärdaten, die im Speicher liegen irgendwo hin speichern) nicht Mitserialisiert, sondern auf null gesetzt wird.

Angenommen du hast eine Model-Klasse, die eine Referenz auf die GUI hast und möchtest diese Klasse serialisieren. Verwendest du Transient nicht, werden alle Objekte, auf die deine Model-Klasse eine Referenz hat, mitserialisiert. Bei der GUI willst du das vermutlich eher nicht haben (wozu auch?) In dem fall könntest du die referenz auf das GUI Objekt transient setzen und sie würde nicht mitgespeichert werden.

Im Gegensatz dazu sind Methoden für den aktuellen Status deiner Klasse nicht von Bedeutung, da sie selbst keinen eigenen Zustand haben. (Du kannst ihr Verhalten per Parametern oder per Feldern [Klassenvariablen] bestimmen.) Um die Klasse zu serialisieren ist es überhaupt nicht notwendig, die Methoden abzuspeichern - die sind in den .class Dateien ohnehin verfügbar.
 

Johns

Mitglied
vielen dank fuer die antworten , mir ist bekannt das transiente variablen nicht mit gespeichert werden dürfen.


nur leider gibt es beispielsweise inn

Java.util -> collection. class ganz unten eine methode die Transient ist ... .

also wird es doch gemacht, und mir erschließt sich der Sinn auch nicht -.-

wenn man die klasse in e-clipse anschaut wird der "fehler" angemeckert

gruß
Johns
 

tfa

Top Contributor
Welche Methode soll denn das sein? Bei mir (JDK1.6) kann ich nichts dergleichen finden.
 

Johns

Mitglied
C:\Program Files (x86)\Java\jre1.5.0_09\lib
Datei : rt.jar

dort der Pfad ist java.util und die Klasse heißt Collections.class ganz unten ist die Methode

public static transient boolean addAll(...); mit namen

addAll


gruß
Johns
 

Johns

Mitglied
hm jetzt weiß ich leider net was das sein soll : )

gibt es da einen Unterschied ?

ist meins eventuell schlechter Stil oder so was?

gruß

Johns
 

ice-breaker

Top Contributor
Deins kann eigentlich nicht sein, die Methodendefinition sollte (und ist) so sein, wie tfa sie beschrieben hat.
 

Johns

Mitglied
naja ich denk mir sowas ja net so einfach aus : ) . hm. kanns vielleicht sein das das erst nach dem Kompilier-vorgang angehaengt wird oder sowas?
 

Johns

Mitglied
naja ich hab java aber von sun heruntergeladen und wenn man diese datei (Collections.class) aus dem jar-archiv holt und dekompiliert dann steht da halt transient so oder so ...



gruß

Johns
 
S

Spacerat

Gast
Na da hat JAD1.5.8 zugeschlagen würd' ich sagen. JAD1.5.8 kann nur Klassen bis JRE1.4 dekompilieren und dem zufolge auch nichts mit generics anfangen. Deswegen wird ein generischer Rückgabewert einer Methode als transient markiert. Ich vermute mal, das die JVMs ab Version 1.5 das intern so handeln, da generics zur Laufzeit ja wieder blos Objekte sind.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben