Direktes return eines Array geht nicht

LimDul

Top Contributor
Rein aus Neugierde, warum funktioniert folgender Code nicht (wird irgendwo mit Sicherheit in der java Language Specification stehen)

Java:
public Class<?>[] getClasses() {
  return { SomeClass.class };
}
aber folgender Code:

Java:
public Class<?>[] getClasses() {
  Class<?> c[] ={ SomeClass.class };
  return c;
}

Und als Follow-Up - Gibt es eine einfache Möglichkeit, das in einer Zeile zu schreibe?
 
Beste Antwort
An array initializer may be specified in a field declaration (§8.3, §9.3) or local variable declaration (§14.4), or as part of an array creation expression (§15.10.1), to create an array and provide some initial values.
Array Initializer (das mit den geschweiften Klammern) ist nur bei Variableninitialisierung (und bei Arrayerzeugung) erlaubt.

Eine Zeile:
Java:
public Class<?>[] getClasses() {
  return new Class<?>[] { SomeClass.class };
}

httpdigest

Top Contributor
An array initializer may be specified in a field declaration (§8.3, §9.3) or local variable declaration (§14.4), or as part of an array creation expression (§15.10.1), to create an array and provide some initial values.
Array Initializer (das mit den geschweiften Klammern) ist nur bei Variableninitialisierung (und bei Arrayerzeugung) erlaubt.

Eine Zeile:
Java:
public Class<?>[] getClasses() {
  return new Class<?>[] { SomeClass.class };
}
 
Beste Antwort
B

BestGoalkeeper

Gast
Zudem kannst du in diesem Fall den generischen Typ nicht konkretisieren, weil sich Arrays und Generics beißen...
 
B

BestGoalkeeper

Gast

All of this results from a known, and deliberate, weakness of generics in Java: it was implemented using erasure, so "generic" classes don't know what type argument they were created with at run time, and therefore can not provide type-safety unless some explicit mechanism (type-checking) is implemented.
 
B

BestGoalkeeper

Gast
Also ich bin kein Fan davon... wenn da etwas steht, was man gar nicht braucht.

Obwohl... das ist ja mit Gartenzwergen auch so.
 

LimDul

Top Contributor
Welchen Vorteil habe ich den vom weglassen der Generics? Ich sehe nur Nachteile:
- Ich bekomme eine Warning
- Man sieht dem Code nicht mehr an, ob das Absicht ist, dass da kein Generics-Type steht oder ob der vergessen wurde

So mache ich klar, dass ich an der Stelle eben keinen konkreten Type angeben kann. Was den Code deutlich klarer macht meines Erachtens.
 
B

BestGoalkeeper

Gast
Ja Gartenzwerge machen auch darauf aufmerksam, dass dort jemand wohnt 🤣 eine Funktion erfüllen sie aber nicht...
 

mrBrown

Super-Moderator
Mitarbeiter
Es macht halt auch einfach einen Unterschied.


Möchte jemand raten, was in beiden Fällen passiert?

Java:
Class c = ...
c.getAnnotationsByType(Object.class);
Java:
Class<?> c = ...
c.getAnnotationsByType(Object.class);
 

httpdigest

Top Contributor
Was mach ich den deiner Ansicht nach gegen die Warning? Vernünftiger Code hat Warning-Frei zu sein.
Du schreibst also ganz genau folgendes:
Java:
public Class<?>[] getClasses() {
  return new Class<?>[] { SomeClass.class };
}
 

httpdigest

Top Contributor
Dann schreibe eine E-Mail an James Gosling oder nutze eine andere JVM-Sprache als Java.
Für alle anderen: So und nicht anders ist der Weg, um einen Producer (die Methode) eines parametrisierten Typs zu deklarieren, bei dem der Typparameter für den Konsumenten egal ist.
 

LimDul

Top Contributor
Ich find das auch ok so. Ich mache lieber Dinge explizit (Hier <?>) als implizit durch weglassen. Bei Generics gibt es andere stellen die mich mehr stören. Je nach Verwendung (? extends ...) kann es passieren, dass man casten muss obwohl es eigentlich nicht notwendig sein muss.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J jsch direktes streamen in ein image Allgemeine Java-Themen 11
T Direktes Überschreiben Allgemeine Java-Themen 7
G Speicherunterschied eclipse/direktes starten Allgemeine Java-Themen 6
rosima26 Unterschiedliche Werte bei return/print Allgemeine Java-Themen 12
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
I Java Optionals mit return-Block Allgemeine Java-Themen 2
R missing return statement Allgemeine Java-Themen 13
V int Array einer return Methode übergeben? Allgemeine Java-Themen 4
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
B XAResource[] return statement Allgemeine Java-Themen 3
V Wildcard aus Parameter in return type Allgemeine Java-Themen 2
P Return oder Global Allgemeine Java-Themen 3
W Rekursion-Probleme mit return Allgemeine Java-Themen 35
Dragonfire Code Konvention for-Schleife / return Allgemeine Java-Themen 15
B boolean return typ verwenden? Allgemeine Java-Themen 5
R return in try-catch-Blöcken Allgemeine Java-Themen 6
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
H return bei Methode Allgemeine Java-Themen 2
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
hdi dynamische return-Werte Allgemeine Java-Themen 15
M Problem mit return-werten Allgemeine Java-Themen 35
B Warum return type Object ? Allgemeine Java-Themen 4
D public boolean return Allgemeine Java-Themen 8
M return-Statement Allgemeine Java-Themen 5
S Wie Carriage Return Line Feed abfragen. Allgemeine Java-Themen 6
M java-doc: @return mehrzeilig gestalten Allgemeine Java-Themen 3
L return-Funktion Allgemeine Java-Themen 5
L return Funktion Allgemeine Java-Themen 6
G return bei generiertem code Allgemeine Java-Themen 6
S Fehler beim return eines String Arrays Allgemeine Java-Themen 3
Fredy Return by value mit String?? Allgemeine Java-Themen 6
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
L Menge der Buchstaben eines Textes zählen Allgemeine Java-Themen 3
F Teil eines Bildes laden Allgemeine Java-Themen 1
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben