Datentypen Generische Datentypen - Syntax

MrXeth

Aktives Mitglied
Hallo, beim Programmieren bin ich auf Folgende 3 Schreibweisen gestoßen:

Code:
List<Integer> a = new List();

List<Integer> b = new List<>();

List<Integer> c = new List<Integer>();

Funktionieren tun alle 3, aber welche ist die Beste? Mein Lehrer behauptet, die letzten beiden sollte man nur verwenden, wobei das aus meiner sicht egal ist, da die Object datentypen dann eh gecastet werden.

Danke für eure hilfe^^
 

httpdigest

Top Contributor
Nehmen wir mal an, dass "List" hier nicht java.util.List ist, sondern irgendeine nicht-abstrakte Klasse mit einem Typparameter. Dann verwendet die erste Variante einen Raw Type (Verwendung eines generischen Typen ohne Typargumente), wozu die Java Language Specification $4.8 Raw Types folgendes zu sagen hat:
The use of raw types is allowed only as a concession to compatibility of legacy code. The use of raw types in code written after the introduction of generics into the Java programming language is strongly discouraged. It is possible that future versions of the Java programming language will disallow the use of raw types.
 

httpdigest

Top Contributor
Eine falsche Verwendung oder Nichtverwendung von Generics führt niemals zu Laufzeitfehlern (es sei denn natürlich durch vom Benutzer explizite/manuelle falsche Downcasts), sondern höchstens zu Compilefehlern.
In diesem Fall kommt es aber nur zu einer Compilerwarnung, dass Raw Types verwendet wurden.
 
X

Xyz1

Gast
@httpdigest
Java:
public static void main(String[] args) {
    List<Integer> a = new ArrayList();
    List b = a;
    b.add("Tag");
    System.out.println(a);
}
 

MrXeth

Aktives Mitglied
Wie habe ich mir das dann denn vorzustellen? Und c führt zu keinen Compilefehlern? Denn so habe ich es in meinen älteren Projekten geschrieben, da ich da die b- Variante noch nicht kannte.
 

httpdigest

Top Contributor
Variante a führt zu einer Compilerwarning (keinem Fehler).
Variante b ist seit Java 7 erlaubt (das Paar aus öffnender und gleich wieder schließender spitzer Klammer wird "Diamond Operator" genannt). Es ist ziemlich exakt dasselbe wie Variante c, nur dass eben seit Java 7 der Compiler schlau genug ist, die Nutzung von (in diesem Fall) Integer als Typargument automatisch aus der Deklaration der zugewiesenen Variablen zu erkennen, so dass du es bei der rechten Seite weglassen kannst.
 

MrXeth

Aktives Mitglied
Okay, danke.

Code:
Stack a = new Stack<String>();
a.push("a");
a.top().compareTo("ABC");

Also soll damit verhindert werden, dass sowas geschrieben wird? Aber das ist ja mehr oder weniger ein Laufzeitfehler. Oder was wäre dann ein konkretes Beispiel?
 

MrXeth

Aktives Mitglied
Dann hab ich noch eine Frage: wenn ich <?> anstatt eines raw types nehme, ist besteht zwischen diesen ja eig kein unterschied? Also benutze ich dies einfach nur, weil raw types doof sind?
 
X

Xyz1

Gast
Wie habe ich mir das dann denn vorzustellen? Und c führt zu keinen Compilefehlern? Denn so habe ich es in meinen älteren Projekten geschrieben, da ich da die b- Variante noch nicht kannte.
Liest Du denn was wir schreiben? Wieso beantwortest Du unsere Fragen nicht? b) ist einfach eine kürzere Schreibweise fürs gleiche. Mich wundert es dass ein Anfänger offenbar diese Problematik kennt. Oder etwas anders ausgedrückt, "trolle" bitte woanders. :mad:

 

MrXeth

Aktives Mitglied
Ich habe nicht gesagt, dass ich Anfänger bin, ich möchte nur wissen, wie ich es richtig schreibe, da ich nicht von Java komme.... Das Thema ist halt von der Thematik her als Anfängerthema einzuordnen. Zudem habe ich deine Frage nicht beantwortet, weil sie sich von selbst geklärt hat.
 
X

Xyz1

Gast
Ich habe nicht gesagt, dass ich Anfänger bin
doch, Lehrer, Schule usw

ich möchte nur wissen, wie ich es richtig schreibe
Variante b

da ich nicht von Java komme
das ist auch kein Verbrechen

Das Thema ist halt von der Thematik her als Anfängerthema einzuordnen
nur bedingt

Zudem habe ich deine Frage nicht beantwortet, weil sie sich von selbst geklärt hat
indirekt wahrscheinlich
 

Neumi5694

Top Contributor
Java wird immer "verbosity" vorgeworfen. Macht man was dagegen, dann passt's auch nicht o_O

Ich konnte "var" noch in keiner Programmiersprache was abgewinnen, in Java ist der Einsatz zum Glück etwas restriktiver. Auf lange Sicht sicher brauchbar.

MrXeth, letztendlich bleibt es dir überlassen, ob du Diamond verwendest oder den Typ (unnötigerweise) ein zweites Mal angibst. Laufzeitfehler kriegst du keine, weil letztendlich eh Object für die Liste verwendet wird. Nur wenn du dann Elemente der Liste behandelst, für die der Cast nicht klappt, dann geht's daneben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
A Generische Datentypen Java Basics - Anfänger-Themen 8
G Frage zum Ungang mit Generische Datentypen Java Basics - Anfänger-Themen 4
I Generische Funktion Java Basics - Anfänger-Themen 3
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
D Generische Klasse Java Basics - Anfänger-Themen 6
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
O Generische Typen Java Basics - Anfänger-Themen 9
M Generische Klassen "FlaschenRegal" Java Basics - Anfänger-Themen 13
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
D statische generische Methoden Java Basics - Anfänger-Themen 3
S Wie muss ich die Generische Methode schreiben? Java Basics - Anfänger-Themen 6
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
N Generische Schnittstellen Java Basics - Anfänger-Themen 2
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
D Generische Typen Java Basics - Anfänger-Themen 20
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
L Generische Liste Java Basics - Anfänger-Themen 4
B Generische Queue programmieren Java Basics - Anfänger-Themen 5
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
A Generische Methode Java Basics - Anfänger-Themen 4
H Collections List in List<SpecificType> als stat. generische Methode zurückgeben Java Basics - Anfänger-Themen 4
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
M Generische Liste Java Basics - Anfänger-Themen 4
B Generische Methode Java Basics - Anfänger-Themen 2
B Generische Klasse Java Basics - Anfänger-Themen 7
B Generische Methoden Java Basics - Anfänger-Themen 8
F Collections Generische Klasse/Methoden Java Basics - Anfänger-Themen 19
L Generische Warteschlange Java Basics - Anfänger-Themen 8
bluerob generische ArrayList -> erbende Objekte auslesen Java Basics - Anfänger-Themen 24
L Generische Containerklasse Java Basics - Anfänger-Themen 9
V Methoden Umwandlung in generische Methode Java Basics - Anfänger-Themen 8
A Generische Collections und Vererbung Java Basics - Anfänger-Themen 2
S Generische HashMap Java Basics - Anfänger-Themen 2
M Klassen Generische Klassen, Personen und Gruppen Java Basics - Anfänger-Themen 6
L Generische ArrayList, CastProblem Java Basics - Anfänger-Themen 2
W generische Module Java Basics - Anfänger-Themen 2
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
D Datentypen Generische Collections und Warnings Java Basics - Anfänger-Themen 8
F Generische Methoden Problem Java Basics - Anfänger-Themen 5
E Generische Arrays durch Typecast mit Object-Array Java Basics - Anfänger-Themen 11
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
B Generische Vererbung was ist der Unterschied? Java Basics - Anfänger-Themen 4
W Generische Klassen Java Basics - Anfänger-Themen 3
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
F Generische Typen auch für statische Methoden? Java Basics - Anfänger-Themen 13
J array über generische arraylist Java Basics - Anfänger-Themen 7
B instanceof Prüfung für generische Typen Java Basics - Anfänger-Themen 5
N 2 dimensionale generische Arrays Java Basics - Anfänger-Themen 9
H Statische generische Methode Java Basics - Anfänger-Themen 2
0x7F800000 generische arrays mal wieder )-; Java Basics - Anfänger-Themen 6
D generische methode <T> void . Java Basics - Anfänger-Themen 9
J Generische Methoden Java Basics - Anfänger-Themen 6
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
S Parameterübergabe: Generische Klasse Java Basics - Anfänger-Themen 4
S generische Felder Java Basics - Anfänger-Themen 2
P Generische Klasse Java Basics - Anfänger-Themen 8
C Generische Klassen, das erste Mal. Java Basics - Anfänger-Themen 8
F Generische Methode - was bringt der Wildcard Operator? Java Basics - Anfänger-Themen 7
F Generische Liste von generischen Objekten. Java Basics - Anfänger-Themen 3
H generische Methoden Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
H generische Bausteine, heterogene Datenstrukturen Java Basics - Anfänger-Themen 2
J generische klassen neue Instanz Java Basics - Anfänger-Themen 5
H Generische Klassen. Java Basics - Anfänger-Themen 16
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
T Unterschiedliche Datentypen - worin abspeichern? Java Basics - Anfänger-Themen 18
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
J Einige Anfängerfragen (Datentypen, Wertebereich) Java Basics - Anfänger-Themen 11
thor_norsk Datentypen unter Java Java Basics - Anfänger-Themen 3
T Datentypen Eigene Datentypen Java Basics - Anfänger-Themen 15
T for-each-Schleife, verschiedene Datentypen Java Basics - Anfänger-Themen 1
G Methoden Methoden mit versch. Datentypen Java Basics - Anfänger-Themen 1
Nicolex3 Größere Datentypen Java Basics - Anfänger-Themen 35
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
mihe7 Von Datentypen und (mehrdimensionalen) Arrays Java Basics - Anfänger-Themen 4
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
W Vergleiche bei generischen Datentypen Java Basics - Anfänger-Themen 7
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
L Binären Bäume für beliebige Datentypen Java Basics - Anfänger-Themen 15
L Datentypen Ausgabe von eigenem Datentypen Java Basics - Anfänger-Themen 2
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
SHasteCode Datentypen Überlauf primitiver Datentypen Java Basics - Anfänger-Themen 4
S Datentypen Java Basics - Anfänger-Themen 14
Antegra Tekkrebell Primitive Datentypen Literal 8072 Java Basics - Anfänger-Themen 21
N Array gleiche Datentypen zusammenrechnen Java Basics - Anfänger-Themen 28
S Datentypen Java Basics - Anfänger-Themen 4
H wählen des kleinstmöglichen Datentypen für Gleitkommazahlen. Java Basics - Anfänger-Themen 2
S Datentypen Java Basics - Anfänger-Themen 2
S Datentypen Abstrakte Datentypen Java Basics - Anfänger-Themen 0
J Zusammenhang Numbers und nummerische Datentypen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben