tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von SE
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
350
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    Moin,

    was ist der Vorteil von dem Keyword transient?

    ich nutze seit kurzem PMD mit einem Standard ruleset und bei Instanz Variablen wird immer markiert das diese nicht transient oder statisch sind. statisch geht nicht weil Instanz variable, aber transient?

    nun frage ich mich was ist der Vorteil davon?

    transient heißt doch, soweit ich weiß, nur das diese Variable nicht serialisiert werden darf.

    also warum markt PMD das so, es gibt fälle da dürfen die Felder Serialisiert werden oder es ist da schlicht egal. Zumal ich in keiner Klasse Serializable implementiere und dadurch die frage erübrigt ob die Variable Serialisiert werden darf oder nicht.
     

  2. #2
    SE Tutorials.de Gastzugang
    Nun ... da wir grade in einem anderen Thread auch übers serialisieren gesprochen haben kommt die Frage : von was leitest du ab ? Wenn du z.B. von Component ableitest wird das dort implementierte Serializable Interface mit vererbt. Das geschiet auch bei vielen anderen Klassen.

    Ohne Source werden wir dir so nicht weiterhelfen können.

    Was aber bis hier her stimmt : das Keyword transient bedeutet das der Inhalt einer Variable beim serialisieren nicht mit gespeichert wird ... und dementsprechend beim deserialisieren auch nicht vorliegt und man also dafür sorgen muss das dieser Inhalt beim deserialisieren neu berechnet wird. Das Sun-Tut hilft da ein ganzes Stück weiter.

    ps : was ist PMD ?
     

  3. #3
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    Zitat Zitat von SPiKEe Beitrag anzeigen
    ps : was ist PMD ?
    vermutlich dies hier : http://de.wikipedia.org/wiki/PMD_%28Software%29

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    @sheel
    Thema verfehlt, das transient zum aussparen bei Serialisierung ist schrieb ich eingangs bereits.
    Mir ging es darum ob es noch weitere Vorteile bringt.

    @vfl_freak
    genau

    @SPiKEe
    Zu PMD, das ist ein Code Check zur sauberen Implementierung. CleanCoding

    Und bei Jungfräulichen Klassen die nichts extenden oder Implementieren meckert der Code Check das transient oder static fehlt.

    static macht keinen sinn da wie Eingags beschrieben es sich um Instanz variablen handelt.
    transient eigentlich auch nicht, da 1. die Klasse selber nicht zu Serialisieren ist und 2. die Felder serialisiert werden dürfen, wenn man irgend wann die Klasse Serialisieren will.


    Oder ist diese Markierung nur als Vorschlag zu betrachten der zu vernachlässigen ist? Wie diese Unshecked Cast Warning wenn man Listen etc aus APIs holt die mit JDK < 1.5 sind und man selber mit JDK >= 1.5 arbeitet


    PS: Es handelt sich lediglich um ein Verständnis Thema, nicht hilfe mein Prog Funktioniert nicht
    Geändert von wakoz (21.10.11 um 11:38 Uhr) Grund: PS
     

  6. #6
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    Zitat Zitat von wakoz Beitrag anzeigen
    @sheel
    Thema verfehlt, das transient zum aussparen bei Serialisierung ist schrieb ich eingangs bereits.
    Mir ging es darum ob es noch weitere Vorteile bringt.
    Auch das wird beantwortet.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  7. #7
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    Zitat Zitat von sheel Beitrag anzeigen
    Auch das wird beantwortet.
    Hast du das gelesen was du da Verlinkst? mal davon abgesehen das im Link Version 5 des Buches ist, steht in Version 8 zu dem Thema auch nichts neues.

    Und es geht da nur um das aussparen von Variablen und Objekten, bezüglich Sicherheit (Daten Schutz) und undefinierter Zustände von Objekten (Threads und Streams) die nicht serialisiert werden können. Für mich nichts Neues

    Ansonsten steht da nichts, oder hast du in einem anderen Bereich der Erklärung der Serialisierung etwas zu weiteren Vorteilen des transient modifiers gelesen?

    wird dadurch die Performance erhöht? oder Speicher Verbrauch der Anwendung minimiert? Oder etwas anders?

    Die Große Frage bei mir ist, Warum Markiert PMD meine Instanz variablen mit es Fehlt transient. Eine Instanz Variable die Serialisiert werden kann und dessen Inhalt in gewissen Klassen meines Programmes auch Serialisiert wird, um diese in eine OracleDB zu schreiben oder über eine Internet Verbindung zu Übertragen.

    Bringt transient Vorteile? Wenn nein, dann ist die Markierung unwichtig und kann aus dem Rulset gelöscht werden. So markert PMD nie wieder eine variable mit dieser Meldung.

    Und es ist kein Vorteil wenn ich aus Grund der Nicht Serialisierbarkeit eines Objektes oder eines Attributes dieses Ausspare. Es ist schlicht weg eine Notwendigkeit die ich zu beachten habe wenn ich eine klasse serialisieren will, die Felder enthält die nicht Serialisiert werden können oder aus Datenschutz Gründen nicht Serialisiert werden sollten.
     

  8. #8
    SE Tutorials.de Gastzugang
    Also da ich nur mal schnell über den Wiki-Artikel von PMD geflogen bin würde ich vermuten das hier das Ruleset von PMD versagt / ziemlich schlecht implementiert ist. Was ich mir vorstellen könnte wäre das er meckert weil er einige Abhängigkeiten nicht auflösen kann um zu merken das gewissen Variablen irgendwann irgendwo doch serialisiert werden (können). Was das mit dem static-Fehler angeht : FAIL *sorry ... anderst kann ich es gerade nicht ausdrücken*. Ich glaube das einige Rulesets nicht ganz so arbeiten wie es mal von den Entwicklern gedacht war ... von daher würde ich ganz einfach sämtliche Rules die "schwachsinn" sind schlicht löschen ... weil was wäre das denn für ne "Optimierung" wenn ich ne Instanzvariable STATIC makiere ? Da würde dann am Ende noch der Compiler meckern.


    Um aber deine konkrete Frage zu beantworten : NEIN ! transient hat KEINE Vorteile. transient dient *wie von uns mehrfach erwähnt* lediglich dazu zur Runtime der VM mitzuteilen : dieses Objekt darf nicht serialisiert werden ... nicht mehr und nicht weniger. Warum PMD trotzdem meckert : Fehlerhafte Rules ...
    wakoz bedankt sich. 

  9. #9
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    Zitat Zitat von SPiKEe Beitrag anzeigen
    transient dient *wie von uns mehrfach erwähnt* lediglich dazu zur Runtime der VM mitzuteilen : dieses Objekt darf nicht serialisiert werden ... nicht mehr und nicht weniger.
    Von uns allen

    Zitat Zitat von SPiKEe Beitrag anzeigen
    Um aber deine konkrete Frage zu beantworten : NEIN ! transient hat KEINE Vorteile.
    Danke.

    Zitat Zitat von SPiKEe Beitrag anzeigen
    Warum PMD trotzdem meckert : Fehlerhafte Rules ...
    Nun ja es ein Warning und ich lasse ungern Warnings im Code
    Nun da ich weiß das es unwichtig ist kann ich es ruhig aus dem Ruleset Löschen, wer Öfters Serialisiert sollte dies aber nicht tun! Da es dann doch ein netter Hinweis sein kann um Fehler zu vermeiden.

    Danke
     

  10. #10
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    Generell sollte man PMD, FindBugs und Co. immer auf seine Bedürfnisse anpassen, da das Standardruleset nicht in jedem Stück Software sinnvoll ist, aber in den meisten Fällen imo. Ich hatte auch schon den Fall, dass verschiedene Tools sich gegenseitig gestört haben, weil man es nicht beiden recht machen konnte.

    Diese Regel um die es hier geht, es sicherlich nur sinnvoll zu benutzen, wenn man irgendwo überhaupt serialisiert.
    Aber anders herum kann man auch argumentieren, dass das Interface Serializable direkt oder indirekt implementiert ist und somit die Klasse generell serialsierbar sein muss und somit man den "Fehler" beheben soll. Ähnlich wie eclipse standardmäßig meckert die serialVersionUID zu setzen.
    Aber mehr will ich dazu auch nicht sagen, ich wollte nur eine andere Sichtweise darauf aufzeigen. Im Endeffekt muss man selbst entscheiden was Sinn macht und was nicht.

    P.S.: Die Variable statisch zu machen ist auch ein Weg die Serialisierung zu umgehen, da statische Variablen nicht serialisiert werden.
    Geändert von Anime-Otaku (26.10.11 um 12:34 Uhr)
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

Ähnliche Themen

  1. Vorteil von Klassen in PHP?!
    Von xtramen01 im Forum PHP
    Antworten: 9
    Letzter Beitrag: 29.05.09, 01:29
  2. PHP Klassen Vorteil ausschöpfen
    Von Shooter2k im Forum PHP
    Antworten: 1
    Letzter Beitrag: 20.08.05, 07:56
  3. Vorteil mehrerer Sub...End Sub
    Von LadySunshine im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 04.06.04, 11:28
  4. Der absolute Vorteil von Java
    Von Christian Fein im Forum Coders Talk
    Antworten: 15
    Letzter Beitrag: 13.05.04, 16:06
  5. .NET was ist der Vorteil davon
    Von nixwisser im Forum ASP
    Antworten: 2
    Letzter Beitrag: 16.04.03, 09:02