Member-Variable erzwingen

Status
Nicht offen für weitere Antworten.

Rock Lobster

Bekanntes Mitglied
Hallo,

wie schaffen es die Swing-Komponenten eigentlich, ein serialVersionUID zu "erzwingen"? Okay, man muß es nicht hinzufügen, aber immerhin wird eine Warning angezeigt, wenn man es nicht macht.

Ist das mit normalen Java-Sprachrfeatures irgendwie machbar? Oder ist das eher ein Hack von Sun? Oder möglicherweise von Eclipse?
 

Rock Lobster

Bekanntes Mitglied
Okay, es ist also mit herkömmlichen Sprachmitteln nicht nachbaubar? Weil das Serializable-Interface ist ja leer...
 
M

maki

Gast
Verstehe die Frage nicht.

Serializable ist ein sog. "Marker Interface", keine Methoden, sondern ein Signal für den Compiler, diese Klasse speziell zu behandeln da sie serialisiert werden muss.

Marker INterfaces sind nicht unüblich, es kann auch sein das es sich dabei "nur" um ein Signal für den Entwickler handelt.
 

Rock Lobster

Bekanntes Mitglied
Naja ob es für mich als kleinen Java-Entwickler ebenfalls möglich ist, bestimmte Member zu "erzwingen", oder ob das - kurz gesagt - nur Sun kann ;)

Also so wie ich das verstanden habe, wurde der Compiler extra daraufhin umprogrammiert, daß er eben bei Klassen, die Serializable implementieren, eine Warnung erzeugt, wenn die serialVersionUID fehlt. Somit ist es also nicht mit "herkömmlichen" Java-Sprachmitteln gemacht, sondern einfach ausgedrückt ein "Compiler-Hack". Somit habe ich als Entwickler keine Möglichkeit, ähnliches zu machen, z.B. ebenfalls ein Interface oder eine abstrakte Klasse, die die Benutzung bestimmter Member voraussetzt. Das war es nur, was ich wissen wollte ;)
 
M

maki

Gast
Achso...

Member sind interne(!) Details die nicht vorgeschrieben werden sollten imho, vorschreiben kann man Schnittstellen (Methoden), entweder über Interfaces oder abstrakte Basisklassen.
 

Rock Lobster

Bekanntes Mitglied
Jo schon klar, aber mich hat's irgendwie interessiert... manchmal wär's z.B. nett wenn man z.B. einen static final String NAME oder DESCRIPTION vorgeben könnte. Natürlich geht das auch indem man einfach die Methoden getName() und getDescription() vorgibt, aber wäre halt evtl. 'ne Alternative... ;)
 

Tobias

Top Contributor
Konstanten kannst du via Interfaces vorgeben. Nur mit Instanz- und Klassenvariablen wirst du wenig Glück haben (Man könnte natürlich eine abstrakte Klasse haben, die als Obertyp genutzt werden muß, wird aber blöd wegen Einfach-Implementierungsvererbung).

mpG
Tobias
 

Tobias

Top Contributor
Naja, dass man das auch mißbrauchen kann, ist klar. Aber wenn es einen gerechtfertigten Anwendungsgrund gibt - warum nicht?

mpG
Tobias

P.S.: <klugscheiß>Sowas wie Anti-Pattern gibt es nicht. Es ist ein Muster (Pattern), wenn auch ein möglicherweise schlechtes.</klugscheiß>
 

Tobias

Top Contributor
Das es den Begriff Anti-Pattern gibt, ist mir bekannt. Aber letztlich ist das nur ein Begriff, der aus Marketinggründen für das griffigere und treffendere "Bad practice" gewählt wurde (Hey, ein Buch mit "Pattern" im Titel verkauft sich immer noch verdammt gut.). Das der Begriff wenig bis keinen Sinn ergibt, mußt du zugeben :).

Die beiden Links zur "Bad Practice Kontanten im Interface" lese ich mir mal durch, vielleicht findet sich ja ein Hinweis, warum das Einfügen von sinnigen, zur Schnittstelle dazugehörigen Konstanten "bad" sein soll.

mpG
Tobias
 
M

maki

Gast
Das es den Begriff Anti-Pattern gibt, ist mir bekannt. Aber letztlich ist das nur ein Begriff, der aus Marketinggründen für das griffigere und treffendere "Bad practice" gewählt wurde (Hey, ein Buch mit "Pattern" im Titel verkauft sich immer noch verdammt gut.). Das der Begriff wenig bis keinen Sinn ergibt, mußt du zugeben icon_smile.gif.
Genauso gut kann man Pattern als Best-Practices bezeichnen...

Da man allerdings schhon Pattern dazu sagt, kann man das Gegenstück, Bad-Practices, auch gleich Anti-Pattern nennen.
Marketing ist beides, nimmt sich nix ;)

Man muss sich halt nur gegenseitig verstehen und deswegen ist es von Vorteil, dieselben Begriffe mit denselben Bedeutungen zu verwenden ;)

Ob best/bad practices, Pattern/Anti Pattern ist mir persönlich wurscht.

Die beiden Links zur "Bad Practice Kontanten im Interface" lese ich mir mal durch, vielleicht findet sich ja ein Hinweis, warum das Einfügen von sinnigen, zur Schnittstelle dazugehörigen Konstanten "bad" sein soll.
Solltest du unbedingt, ist eigentlich schon lange bekannt ;)
Es DER Grund für static imports.
Die Probleme gehen damit los, das interfaces meist public sind, und Konstanten meist Implementierungsdetails... ausserdem sind Interfaces nicht dafür gemacht, um bequem Konstanten zu veröffentlichen, ein Missbrauch mit hässlichen Konsequenzen.

Blochs Buch ist sehr empfehlenswert, wenn auch in manchen Dingen überholt.
Zum Glück kommt diesen Herbst die 2nd Edition.
 

tfa

Top Contributor
Tobias hat gesagt.:
vielleicht findet sich ja ein Hinweis, warum das Einfügen von sinnigen, zur Schnittstelle dazugehörigen Konstanten "bad" sein soll.
Das ist es nicht. Dieses Anti-Pattern bezieht sich nur auf Interfaces, die ausschließlich Konstanten beinhalten und nur aus Schreibfaulheit verwendet werden (bzw. wurden).
Gegen Konstanten in normalen Schnittstellen (die auch noch "sinnig" und "dazugehörig" sind) wird niemand etwas haben.
 

Tobias

Top Contributor
Also Interfaces die nur Konstanten enthalten, fand ich schon immer "häßlich" und habe sie in den fünf Jahren meiner Java-Programmiertätigkeit auch nie benutzt. Konstanten gehören generell nur selten in ein Interface, da sind wir einer Meinung. Aber trotzdem kommt es (speziell bei Factories) hin und wieder in meinen Projekten vor, das für jede Produktgruppe die produziert werden können soll, eine Konstante im Interface hinterlegt ist. Ich weiß, eigentlich gibt es dafür Enums, aber manchmal ist es ja sinnvoll selbst festlegen zu können, welchen Wert die Konstanten letztlich haben - zum Beispiel für Bitschiebereien.

Und zu den Patterns (sorry, ich kann's mir nicht verkneifen): Die GoF hat sich einfach ein paar Muster der Softwareentwicklung gegriffen und diese neutral benannt. Das das zufällig alles positive Muster waren, heißt nicht, das "Pattern" plötzlich für "Best Practice" steht. Aber natürlich hast du recht, dass es hauptsächlich darum geht, einander zu verstehen. Was mit Antipattern gemeint ist, ist mir ja auch klar. Genau wie bei "gedownloadet" ;) ...

mpG
Tobias

Edit: "Benutzt" habe ich Konstanten-Interfaces schon ab und zu (z.B. SwingConstants), aber geschrieben habe ich noch nie eins.
 
M

maki

Gast
Also Interfaces die nur Konstanten enthalten, fand ich schon immer "häßlich"
Dann sind wir uns ja einig :D

Und zu den Patterns (sorry, ich kann's mir nicht verkneifen): Die GoF hat sich einfach ein paar Muster der Softwareentwicklung gegriffen und diese neutral benannt. Das das zufällig alles positive Muster waren, heißt nicht, das "Pattern" plötzlich für "Best Practice" steht.
Naja, kommt auf die Anwndung an ob es positiv oder negativ ist.
zB. ist das Singleton so wie es von den meisten verwendet wird ein sog. "Anti-Pattern" ;)
 

Rock Lobster

Bekanntes Mitglied
Naja mir ging's eigentlich nicht direkt um Konstanten, die bereits feststehen, sondern eher so darum, zu definieren, DASS eine Implementierung bzw. Ableitung einer Klasse diese Konstante definieren MUSS.

Aber wie gesagt, sowas ist letztendlich lösbar indem man einfach ein getName() statt NAME definiert, denn ein getName() kann ich vorab schon in einer abstrakten Klasse benutzen, und dann erzwingen, daß die abgeleitete Klasse dieses getName() auch implementiert.
 

Janus

Bekanntes Mitglied
meine frameworks sind vollgestopft mit konstanten feldern in interfaces :p ich finds einfach schöner, auf diese art eindeutige identifier für meine factories zu erzeugen, als irgendwas über reflection zusammenzuwürfeln.

interfaces, die lediglich als eimer für nen haufen konstanten herhalten sind aber tatsächlich ne eklige nummer.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
ruutaiokwu NullPointerException auf member, die per konstruktor gesetzt wird (multithread-kontext) Allgemeine Java-Themen 2
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
S toString() für alle Member einer Klasse. Allgemeine Java-Themen 6
L Abstrakte Klasse: Member zwingend überschreibbar machen Allgemeine Java-Themen 2
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
J Wo kommt der Wert der Variable her ? Allgemeine Java-Themen 6
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
H lokale Variable bei Optional verwenden Allgemeine Java-Themen 11
A Variable in if initialisieren Allgemeine Java-Themen 23
S Variable als Objekt Name Allgemeine Java-Themen 3
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
A Variable, welche Exeption wirft als "Global" deklarieren Allgemeine Java-Themen 13
A Scanner Variable Klassenimtern deklarieren Allgemeine Java-Themen 12
L Variablen Variable nicht aktualisiert Allgemeine Java-Themen 3
denny86 NetBeans Ordnernamen rekursiv auslesen und in Variable verarbeiten Allgemeine Java-Themen 38
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
T AWT AWT-EventQueue-0 Null_Pointer_Exception durch Variable Allgemeine Java-Themen 12
M Variable ändern bei jedem Schleifendurchlauf Allgemeine Java-Themen 32
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
S JFrame Variable mitgeben Allgemeine Java-Themen 5
M Variable außerhalb Klasse definierbar? Allgemeine Java-Themen 2
X Bild -> lokale Variable -> DB -> lokale Variable Allgemeine Java-Themen 3
F Aktuelle Variable Allgemeine Java-Themen 2
J String Variable verändert sich plötzlich Allgemeine Java-Themen 8
J private static final String variable Allgemeine Java-Themen 8
A Long variable wird negativ??? Allgemeine Java-Themen 1
reibi Classpath Classpath Variable beim Tomcat Allgemeine Java-Themen 2
M Zeiger auf statische Variable Allgemeine Java-Themen 1
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
F Variable übergeben?! Allgemeine Java-Themen 2
L Variable auch in der function verfügbar machen? Allgemeine Java-Themen 4
M Collections Typ Variable einer generischen Collection ? Allgemeine Java-Themen 4
P Variablen Variable von void im ActionListener verwenden Allgemeine Java-Themen 3
M Parallele Programmierung: volatile Variable nimmt ungewöhnlichen Wert an Allgemeine Java-Themen 3
iB0T Variable Wert ausrauchen Allgemeine Java-Themen 3
T Variablen Variable wird als nicht genutzt angezeigt Allgemeine Java-Themen 8
S Datentypen Eine Variable von String zu Int ändern Allgemeine Java-Themen 5
Hoppelmann "Variable" in String erkennen Allgemeine Java-Themen 2
B Variable class in java.lang.Object Allgemeine Java-Themen 11
O Variablen Originalname einer übergebenen Variable prüfen Allgemeine Java-Themen 9
X Windows-Environment-Variable per jRegistryKey anpassen Allgemeine Java-Themen 6
P Variable in Array stellen Allgemeine Java-Themen 11
M Arraynamen durch Variable festlegen lassen Allgemeine Java-Themen 5
J Anderem Thread Variable mitgeben Allgemeine Java-Themen 2
nrg Auszulagernder Part, der aber variable Methode/Klasse aufruft Allgemeine Java-Themen 7
I %AppData% Variable für einen Prozess setzen Allgemeine Java-Themen 23
G Variablen Variable extern speichern - wie? Allgemeine Java-Themen 9
M Variablen Wie Variable verfügbar machen? Allgemeine Java-Themen 16
A variable aus einer anderen klasse verändern Allgemeine Java-Themen 5
G Variable Methodenwahl Allgemeine Java-Themen 11
C JFormattedTextField Inhalt einer Variable zuweisen Allgemeine Java-Themen 11
C Variablen Variable einer Klasse in einer anderen Klasse Nutzen Allgemeine Java-Themen 8
B Umgebungsvariable Variable wird nicht übernommen Allgemeine Java-Themen 4
N variable Anzahl von Objektinstanzen zur Laufzeit erstellen Allgemeine Java-Themen 4
C Environment Variable in Pfad -> Datei öffnen Allgemeine Java-Themen 5
Q Variable aus Schleife/Switch benutzen Allgemeine Java-Themen 7
algorismi int-variable Value Change event Allgemeine Java-Themen 3
E Variable dynamisch ausgeben Allgemeine Java-Themen 5
trash super() mit Variable bestücken Allgemeine Java-Themen 3
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
A Variable Parameterinhalte an einen Query übergeben? Allgemeine Java-Themen 3
B static Variable / Unterklasse Allgemeine Java-Themen 2
J Was ist schneller? Neue Variable oder neuer Wert speziell int Allgemeine Java-Themen 3
S Innere Klasse: Zugriff auf äußere Variable Allgemeine Java-Themen 5
Semox Fehler - Zuweisung aus BufferedReader an Variable Allgemeine Java-Themen 3
Daniel_L RegEx - variable Vorkommen ersetzen? Allgemeine Java-Themen 5
P Unicode-Sequenz (u1234) in Variable speichern und ausgeben Allgemeine Java-Themen 6
G auf variable in anderer class zugreifen Allgemeine Java-Themen 2
G Variable global nutzen Allgemeine Java-Themen 4
V Variable vom Typ String zum Typen "Message" konve Allgemeine Java-Themen 2
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
M Try-Catch: wie wird Variable bei Exception initialisiert? Allgemeine Java-Themen 8
G Speicherverbrauch einer Variable Allgemeine Java-Themen 2
C ArrayList mit Variable im Namen Allgemeine Java-Themen 16
T JNI Referenz auf Variable in Java? Allgemeine Java-Themen 2
G Überprüfen, ob Variable ein Array ist? Allgemeine Java-Themen 5
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
M Zugriff auf Objekt, Name in Variable Allgemeine Java-Themen 3
G Problem mit einer Variable Allgemeine Java-Themen 3
O Future Variable Allgemeine Java-Themen 4
M variable übergeben NICHT KOPIEREN Allgemeine Java-Themen 12
loadbrain KeyEvent mit Variable verknüpfen Allgemeine Java-Themen 4
M Prüfen ob Variable vorhanden / initalisiert ist Allgemeine Java-Themen 4
G Variable wird ignoriert - warum ? Allgemeine Java-Themen 36
L ctrl-z wird nicht in Variable gespeichert Allgemeine Java-Themen 4
G Variable Anzahl JTextfleder Allgemeine Java-Themen 3
R Wenn Variable = wat ist Allgemeine Java-Themen 7
H Zugriff auf statische Variable synchronisieren Allgemeine Java-Themen 4
H globale Variable wird nicht überall erkannt Allgemeine Java-Themen 3
G Zugriff auf Variable in abgeleiteter Klasse Allgemeine Java-Themen 6
R Eine Variable an eine Methode mit Array übergeben Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben