Die ganze Wahrheit über JCP

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Liest mal das hier durch
The Java Gated Community Process

Wenn man sich das ganze durch den Kopf gehen läßt, dann wundert man sich
nicht mehr, dass die Weiterentwicklung von Java so schleppend voran geht.
Ich kenne eine Firma, die am JCP beteiligt war und nach einem Streit über die
Änderungen in JDK 1.5 ausgestiegen ist. SUN läßt keine konstruktive Kritik zu.
Streitpunkt waren u.a. die Generics, wie sie letztendlich in JDK 1.5 implementiert wurden.

Vorschlag war
Code:
Map m = new HashMap(); 
Car a = m.get("Ford"); // Compiler übernimmt den Cast
Die "geniale" Lösung von SUN
Code:
Map<String, List<Car>> cars = new HashMap<String, List<Car>>();
Car a = m.get("Ford");
Es ist eine kranke Syntax, es sieht aber so aus, dass man es nicht ändern kann. :roll:
 
B

bygones

Gast
keine kranke lösung.... ich als entwickler bin ich der 2. lösung dankbar.

ich weiß genau was sich wie in der map befindet. Ich bin nicht darauf angewiesen, dass andere 100% richtige Kommentare schreiben. Ich sehe somit das ganze nicht als krank sondern als hilfreich an !!

ich halte die erste lösung für unsinnig - sie sagt in keiner weise aus was sich in der map befindet...

ergo: finde deine Aussage falsch
 

Bleiglanz

Gesperrter Benutzer
Der Vorschlag ist doch kompletter Unsinn, wo ist da die Typsicherheit? Warum glaubst du dass die geniale Lösung von Sun aus einer Liste von Cars einen Car machen kann? Was soll den der Compiler mit
Code:
Map m = new HashMap(); 
m.put("Ford",new Tiitti())
Car a = m.get("Ford")
anfangen? Soll der Compiler "vorwärts" lesen und alles durchschauen - das ist unmöglich!

Auch wenn die Generics in Java sicher nicht optimal sind (Erasure, keine Typinfo zur Laufzeit usw.) - so einfach wie du dir das vorstellst gehts nicht, irgendwas in der Form

Code:
Map<String, List<Car>> cars = new HashMap<String, List<Car>>();
muss es geben (sonst kann der Compiler ja nix überprüfen), die Syntax ist natürlich etwas strange (aber auch nicht seltsamer als String s = new String())
 
B

Beni

Gast
Ähms, ich hab ein bisschen Mühe mit diesen Quellcodes:
Der 2. enthält einen ziemlich heftigen Fehler, und würde den Compiler nicht überleben.
Und der 1... was passiert denn, wenn ich "Animal a = m.get("Ford");" schreibe? Ich sehe da keine Methoden um zu überprüfen, ob das geht (ausser einer RuntimeException). So auf den ersten Blick sieht das für mich eher nach einem Rückschritt aus (von 0 Typsicherheit auf noch weniger).
Also wie sollte Variante 1 funktionieren?
 
S

stev.glasow

Gast
@gast: Wer hat so etwas vorgeschlagen? Konnte in dem Artikel nichts dazu finden.
Wenn es diese von dir angesprochen Firma war würde mich echt mal interssieren was die da als Vorteil sehen? Irgendwie widerspricht das doch einer typensicheren Sprache wie Java oder C.

Und zum Artikel:
Es mag einiges dran sein, und vielleicht würde ich mich auch etwas verarscht vorkommen aber sind solche Partnerschaften nicht sowieso ehr zu Werbezwecken? Man darf sich dann halt als Partner von SUN, Cisco wem auch immer ausgeben. Und ein wirkliches Mitspracherecht kann man doch für 5000$ auch nicht erwarten. Oder war das bei diesem JCP anderes geplant :)
 
G

Guest

Gast
Das ist irgendein Systemhaus in Frankfurt gewesen. Weiß nicht genau.
Ich kam drauf als ich auf diesen Artikel gestossen bin. Es hat mich
an das Gespräch mit dem Kumpel erinnert (ehemaliger Studienkamerad).
Es kann sein, dass ich ihn missverstanden habe und die vorgeschlagene
Variante doch anders ausgesehen hat.
Ich bin der Meinung, dass eine strenge Typenprüfung nur eine Krücke für
den Compiler ist. Es ist durchaus möglich anhand des Codes zu bestimmen,
ob sich Konflikte ergeben oder nicht. Eine Compiler-Warnung, bei falscher
Anwendung, würde ausreichen.
Nehmen wir mal das Beispiel von Bleiglanz
Code:
Map m = new HashMap(); 
m.put("Ford",new Tiitti());
Car a = m.get("Ford"); // Warnung vom Compiler und/oder einfach ClassCastException zur Laufzeit
In jedem Fall finde ich sowas besser als
Code:
Map m = new HashMap(); 
m.put("Ford",new Tiitti());
Car a = (Car)m.get("Ford"); // ClassCastException
Wenn ich ein Objekt eines unbestimmten Typs einer Variablen vom
bekannten Typ zuweise, dann ist klar, dass ich es casten muss.
Warum nicht gleich auf das Getippe verzichten und die Arbeit dem Compiler
überlassen, unabhängig davon, ob es ClassCastExceptions auslöst oder nicht?
 

Bleiglanz

Gesperrter Benutzer
Code:
 Map m = new HashMap();
m.put("Ford",new Tiitti());
Car a = m.get("Ford"); // Warnung vom Compiler und/oder einfach ClassCastException zur Laufzeit
lächerlich, ignoriert völlig die Realität von Java, wo eben vieles ausserhalb der Sichtweite des Compilers liegt
Code:
 Map m = new HashMap();
 if(strangecondition) m.put(new Tittitit()); else m.put(new Tottli());
 some3rdpartyLibFunction(m);
 Car a = m.get("Ford"); // Warnung vom Compiler und/oder einfach ClassCastException zur Laufzeit

>>und/oder einfach ClassCastException zur Laufzeit

= verzicht auf Generics, toller Vorschlag
 

dotlens

Top Contributor
es zwingt dich nimand mit Generics zu arbeiten. Das ist deine eigene Entscheidung. Es werden dir aber viel leichter Fehler passieren wenn du ohne Generics arbeitest.
Kannst du mir mal erklären woher der Compiler wissen soll welcher typ ein Objekt zur Laufzeit hat? ;-)

Ein Post reicht *lösch*
 
G

Guest

Gast
Mit
Code:
Car a = m.get("Ford"); // Warnung vom Compiler und/oder einfach ClassCastException zur Laufzeit
meinte ich nicht, dass es, wie bisher, Fehlermeldungen bringen soll,
sondern eine Warnung, falls Stellen im Code auftauchen, wo Objekte
anderen Typs in eine Collection geschrieben wurden. (egal in welcher Reihenfolge)

Jetzt mal unabhängig von Generics.
Wenn man ein Objekt einer Variable zuweist, die einen bestimmten
Typen hat, dann ist in der alten Syntax ohne Generics immer ein Cast
nötig, sonst ist der Code nicht compilierbar.
Code:
Car a = (Car)m.get("Ford");
Car a = m.get("Ford"); // Cast wird bzw. sollte vom Compiler eingefügt werden
Ich finde den Cast einfach nur überflüssig, da er selbstverständlich ist.
Das habe ich mit den Warnungen und ClassCastExceptions gemeint.

Wie auch immer, ich kann mit der neuen Syntax auch leben. Jede Sprache hat ihre
Macken, da muss man durch. Es ist so ähnlich wie das THEN bei Bedingungen in
Pascal (IF Bedingung THEN). Alles nur Krücke für den Compiler. Es steckt keine
Funktionalität dahinter.
 
B

Beni

Gast
Anonymous hat gesagt.:
...Ich finde den Cast einfach nur überflüssig, da er selbstverständlich ist...
Da bin ich ganz anderer Meinung: der Cast ist ein wichtiges Instrument um dem Programmierer zu sagen "Vorsicht, hier könnten Fehler sein". Natürlich könnte das auch der Compiler ausgeben, aber so hat man bereits im Code die Gedankenstütze.

Code:
Jede Sprache hat ihre Macken, da muss man durch. ... . Alles nur Krücke für den Compiler. Es steckt keine
Funktionalität dahinter.
Wenn dir das alles nicht passt, kannst du auch Assembler coden. Da hast du auch dieses überflüssige OOP-Quatsch-Zeugs (das eh nur verwirrt) nicht... </sarkasmus>
Sry, ich verstehe deinen Standpunkt überhaupt nicht, Generics sind eine wundervolle Spracherweiterung mit denen die Fehlerwahrscheinlichkeit dramatisch sinkt (und das ist für mich das wichtigste)
 
S

stev.glasow

Gast
Der vorschlag hat auch gar nix mit Generics zu tun, im Gegenteil - so wie Bleiglanz bereits gesagt hat, """= verzicht auf Generics, toller Vorschlag""
 

Bleiglanz

Gesperrter Benutzer
Es ist durchaus möglich anhand des Codes zu bestimmen,
ob sich Konflikte ergeben oder nicht
Ganz im Gegenteil, es völlig unmöglich
Ich finde den Cast einfach nur überflüssig, da er selbstverständlich ist.
Schon klar, du gehst davon aus, dass der lvalue bestimmt was von der rechten Seite kommt, d.h. der Compiler könnte in der Zeile
Code:
Foo f = mylist.get(0); // javac macht einfach (Foo) list.get(0); draus
den Cast einfach "automatisch einfügen", leider hat das überhaupt nichts mit generics zu tun (bei denen es ja im Collection Bereich vor allem um das EINFÜGEN geht)!

Dein Vorschlag würde nur bei völlig trivialen Codezeilen wie der obigen eine minimale Einsparung an Schreibarbeit bringen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
F String nach Schlüsselwörtern durchsuchen und ganze Zeile ausgeben Allgemeine Java-Themen 4
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
B CellRenderer für ganze Spalte Allgemeine Java-Themen 5
D Ganze .jar decompilen ? (Program) Allgemeine Java-Themen 2
P ganze Zeilen in einem File mit .replace() ändern. Allgemeine Java-Themen 10
C Thread.sleep pausiert das ganze Programm Allgemeine Java-Themen 4
F eclipse - Warnung für ganze Klasse umgehen Allgemeine Java-Themen 2
G Auf eine ganze Zahl aufrunden Allgemeine Java-Themen 30
G ganze Pfad in einer Ordnerstruktur abbilden Allgemeine Java-Themen 19
R Garbage Collector rennt die ganze Zeit Allgemeine Java-Themen 7
H ganze zahl true / false Allgemeine Java-Themen 3
D ganze packete importieren --> langsam? Allgemeine Java-Themen 9
kodela Datenübergabe über Buttons Allgemeine Java-Themen 8
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
A ByteArray über Socket Allgemeine Java-Themen 3
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
T Etikettendrucker über TCP-IP Allgemeine Java-Themen 1
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
L Aufwandsabschätzung: Android-App Aufnahmefunktion (foto) und zweiter Ebene über dem Foto (teiltransparent) Allgemeine Java-Themen 6
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Threads über Kommandozeile Allgemeine Java-Themen 5
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
K Auf Dateiverzeichnis extern zugreifen (evtl über XML??) Allgemeine Java-Themen 22
C VisualVM oder Jconsole über Jolokia-Proxy Allgemeine Java-Themen 0
G USB-Pins über Java ansteuern Allgemeine Java-Themen 8
Ernesto95 Best Practice Localization über ResourceBundle Allgemeine Java-Themen 6
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
kodela Eigenartige Datumsberechnung über GregorianCalendar Allgemeine Java-Themen 15
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
C Input/Output Zip Files über Socket senden und empfangen Allgemeine Java-Themen 6
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
L Videodateien über Java öffnen unabhängig vom Format Allgemeine Java-Themen 4
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
F Content-Disposition ermitteln über URL Allgemeine Java-Themen 2
ARadauer Checksumme über BigDecimal Werte Allgemeine Java-Themen 11
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
S VLC + Lied über Java starten Allgemeine Java-Themen 17
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
A Sinuston ausgeben und über Mikro Amplitude messen – machbar? Allgemeine Java-Themen 6
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
S NoSuchMethodError beim Ausführen einer C Methode über JNI Allgemeine Java-Themen 5
H OOP Daten über TCP Allgemeine Java-Themen 5
Pastafari Iterator über nested HashMaps Allgemeine Java-Themen 7
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
B VoIP-Gespräche über Computer führen Allgemeine Java-Themen 3
S Jar-File startet nicht über doppelklick Allgemeine Java-Themen 2
C Java Programm über SSH starten Allgemeine Java-Themen 16
K Internetverbindung über PuTTy herstellen?! Allgemeine Java-Themen 9
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
S Input/Output Binärdatei über Bytestreams Allgemeine Java-Themen 4
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
J Explorer über Code starten Allgemeine Java-Themen 15
kodela Problem mit Kopieren über FileChannel Allgemeine Java-Themen 4
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
L CMD über Java öffnen Allgemeine Java-Themen 8
U Mailclient über getDesktop.mail vorbereiten, Problem beim Anhang: Allgemeine Java-Themen 3
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
R Frequenzausgabe (2 Kanal) über Lautsprecherausgang Allgemeine Java-Themen 22

Ähnliche Java Themen

Neue Themen


Oben