generische arrays mal wieder )-;

Status
Nicht offen für weitere Antworten.

0x7F800000

Top Contributor
Hey leuts!
Sry, ist normalerweise nicht meine Art, aber anscheinend bin ich diesmal auf "der anderen seite" gelandet: ich hocke grad an einer blöden informatik hausaufgabe und komme mit diesen Generics wieder nicht klar...^^ :autsch:

Folgende Frage (zum zigtausendsten mal...):
Code:
public static <T> T[] myFunction(SomeGenericClass<T>[] array){
  T[] result=(T[]) new Object[123];
  //zeugs aus array in result umkopieren...
  return result;
}
1) warum meckert das ding denn nicht? Wenn ich SomeGenericClass<String> da übergebe, interessiert es das T drinnen in der methode doch eh nicht, weil String gelöscht wird, und dann weiß doch dadrinne niemand mehr, was T gewesen sein soll?

2) wenn ich myFunction(SomeGenericClass<String>[] array) aufrufe, warum kann ich das ergebnis nicht nach String[] gewaltsam casten, da sind doch nur strings drinne, ob der compiler das vergessen hat oder nicht braucht mich doch nicht zu interessieren, warum fliegen also trotzdm ClassCastExceptions?

Wäre echt dankbar, wenn mir jemand konkret sagen könnte, wie ich denn jetzt den gewünschten String-Array aus dieser dämlichen methode rausprügeln soll :bahnhof:

greetz, Andrey
 
S

SlaterB

Gast
> interessiert es das T drinnen in der methode doch eh nicht, weil String gelöscht wird,

warum sollte etwas wie 'String' gelöscht werden?
was verstehst du hier unter 'String' und 'löschen'?

> interessiert es das T drinnen in der methode doch eh nicht, weil String gelöscht wird,

T ist String, klare Angelegenheit

> , warum kann ich das ergebnis nicht nach String[] gewaltsam casten

ein Object[] kann nicht auf String[] gecastet werden,
ob nur Strings oder andere Objekte drin sind, kann doch nicht für das Casten relevant sein,

stell dir vor, zwei Threads haben eine Referenz auf das Objekt[],
zu einem Zeitpunkt sind nur Strings drin und ein Thread macht ein String[] draus,
kurze Zeit später schreibt ein anderer Thread, der noch die Object[]-Sicht hat, ein JFrame rein,

was soll denn in dieser Situation passieren?
nene, so nicht

edit:

Code:
public class Test
{
    static boolean get = true;

    public static void main(String[] args)
    {
        List<String>[] list = new List[1];
        for (String st : myFunction(String.class, list))
        {
            System.out.println("st: " + st);
        }
    }

    public static <T>T[] myFunction(Class<T> tClass, List<T>[] array)
    {
        T[] result = (T[])Array.newInstance(tClass, 4);
        // zeugs aus array in result umkopieren...
        return result;
    }
}
 

Marco13

Top Contributor
Statt explizit das class-Objekt für den Inhalt zu übergeben, kann man auch mit array.getClass().getComponentType() arbeiten.
edit: Ach, Unfug - das übergebene ist ja garkein T-array :oops: *sich ein koffeingesöff holt*


Zu 1: Er meckert doch!? Er beschwert sich über eine "unchecked conversion". (Gut, das kann man nicht verhindern, aber man kann verhindern, dass diese unchecked conversion fatale Folgen hat...). Und 2. hat Slater ja schon beantwortet. Ein Array muss "wissen, was in ihm steckt".
 

0x7F800000

Top Contributor
okay, vielen Dank für die antworten, zumindest habe ich nun (wieder mal^^) verstanden, warum es so nicht geht (und werde das wohl genauso schnell wieder vergessen :( da ich mich momentan ja in der programmier-pause befinde).

Die Lösung kann ich allerdings nicht mit begeisterung aufnehmen, weil diese mir schlicht und einfach zu antiintuitiv erscheint. Soll ich jetzt jedes Mal für jedes beliebig triviale Problemchen den Code mit diesen explizit übergebenen Class-Objekten aufblähen und mit diesen ganzen reflection-geschichten rumballern und so tun als würde ich wissen was ich da mache?

Mir fehlt im moment vor allem irgendwie die motivation mich in irgendetwas reinzudenken, was nur wegen dieser mythischen "rückwärtskompatibilität" so merkwürdig umgesetzt wurde. Ich kann das nicht nachvollziehen. Alle laden sich jeden monat neue versionen von eclipse runter, kaufen sich jedes halbe jahr neue computerspiele, kaufen sich alle paar jahre neue rechner, und trotzdem nahmen die java designer die finstersten hacks in kauf, um die generics doch noch irgendwie rückwärtskompatibel hinzufummeln... ???:L

Seid mir bitte nicht böse. Ist womöglich nur vorübergehende Stimmungsschwankung, vielleicht sehe ich ja irgendwann mal ein, dass es wirklich irgendwie supertoll ist. Aber konkret heute hab ich mir wieder sowas durchgelesen, und will einfach nur irgendwohin kreischend wegrennen. Allerdings weiß ich nicht wohin. Wahrscheinlich finde ich nie eine Sprache, die mir 100% gefällt, bis ich mir eine eigene formuliere...^^ :roll:

greetz
Andrey
 
S

SlaterB

Gast
Arrays waren schon vor Generics immer bisschen anders, wie auch die einfachen Datentypen gegenüber ihren Wrappern (int vs Integer)

nimm Collections
 

didjitalist

Bekanntes Mitglied
kann SlaterB nur zustimmen. wenn man mit generics arbeitet, sollte man array vergessen. alle collection klassen lassen sich auch immutable machen, man vermisst also nix.
 

0x7F800000

Top Contributor
Hm, ja, solange ich die ganzen vorgefertigten Datenstrukturen mit Generics anwende, habe ich auch keine probleme damit, habe mich noch nie durch die merkwürdigen eigenschaften von generics eingeschränkt gefühlt, wenn's um die normale anwendung ging.

Aber jedes mal, wenn ich selbst irgendeinen lowleveligen sortieralgorithmus auf arrays mit unbekannten inhalt loslassen wollte, ging wie immer gar nichts mehr. :roll:
Und wenn es eine implementierung "zu lehrzwecken" sein soll, an der nachvollziehbar bleiben sollte, was da passiert, sind solche monströse reflection-api konstruktionen irgendwie fehl am platz.

Es ist ja auch nicht so, als ob Java darunter irgendwie zu leiden hätte. In 99,99% der fälle störts ja keinen. Aber wenn man dann ein bisschen genauer hinschaut, dann stellt man doch fest, dass diese umsetzung von generics irgendwie ziemlich... hässlich ist :roll: Ich kann mir jedenfalls nicht vorstellen, dass sich das irgendein Mensch auch noch in 20 jahren anguggt, und so schön findet, dass er das gar nicht ändern will und einfach weiter so lässt wie es ist.

Das mit der Rückwärtskompatibilität ist doch ein allgemeines Problem:
- Auf dauer überleben eh nur die besten (Bakterien, Ratten, Viren, Algorithmen, Religionen, Autos, ..., Programmiersprachen)
- Generics finde ich in Java nicht so toll gelungen. Meine meinung zählt einen Dreck, okay... Aber eines tages wird doch womöglich einer kommen, der dasselbe meint, und dessen Wort was zählt. Also wird Java entweder abgeändert oder abgeschafft.
- Je später das passiert, desto mehr vorwärtsinkompatiblen code gibt es bis dahin, und das ist dann umso schwieriger, alles wieder gradezubiegen.

Warum verscheibt also überhaupt jemand veränderungen auf später, statt mängel so früh wie nur möglich loszuwerden? Wozu überhaupt Rückwärtskompatibilität, ewig kann's doch eh nicht gutgehen? :bahnhof:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Generische Arrays durch Typecast mit Object-Array Java Basics - Anfänger-Themen 11
N 2 dimensionale generische Arrays Java Basics - Anfänger-Themen 9
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
M Datentypen Generische Datentypen - Syntax Java Basics - Anfänger-Themen 25
O Generische Typen Java Basics - Anfänger-Themen 9
M Generische Klassen "FlaschenRegal" Java Basics - Anfänger-Themen 13
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
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
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
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
A Generische Datentypen 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
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
H Statische generische Methode Java Basics - Anfänger-Themen 2
G Frage zum Ungang mit Generische Datentypen Java Basics - Anfänger-Themen 4
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
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste und Arrays Java Basics - Anfänger-Themen 12
N mehrdimensionale arrays Java Basics - Anfänger-Themen 12
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
S Hilfe bei Praktischen Aufgaben von Arrays Java Basics - Anfänger-Themen 39
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
J Mehrdimensionale Arrays Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
M Arrays Java Basics - Anfänger-Themen 3
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
Ostkreuz Summieren von Arrays Java Basics - Anfänger-Themen 4
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
rosima26 Geordnete Arrays ausgeben Java Basics - Anfänger-Themen 31
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
E Zinsrechnung mithilfe von Arrays Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben