Datentypen Generics: Erste Berührungen

MarvinsDepression

Bekanntes Mitglied
Ich versuche mich erstmalig in Generics und finde zur folgenden Situation keine klare Antwort.
typeA und typeB erben von Object.
main() erhält von method_A() ein Array, dessen konkreter Datentyp erst zur Laufzeit bestimmt ist.
Um den Scope zu halten kann ich (im Beispiel) die Wertzuweisung nicht zusammen mit der Initialisierung von value erledigen, also erstmal Typ Object.
Am Ende der main() übergebe ich value an method_B(), die dann Elemente des Arrays mit Methoden von Object weiterverarbeitet..

Java:
<T> T[] method_A() {
    ...
    if (...) return typeA[];
    return typeB[];
}


<T> method_B(T[] value) {
    ...
    ... value[0].toString();
    ...
}


<T> main() {
    Objekt value = null;
    {
        ...
        value = method_A();
        ...
    }
    method_B( (T[]) value);
}

Funkionieren würde es, aber mir gefällt das irgendwie nicht. Ich fürchte, dass es mir den Code zur Laufzeit um die Ohren hauen kann.
Außerdem: Komme ich um das 'Object' in main() drumrum? Geht das auch ohne?

Also, wie geht sowas in schön und sicher?
 

Robert Zenz

Top Contributor
Dein Code ergibt aber auch keinen Sinn, du verwendest generische Typen nur um auf Object zuzuweisen, das, um, tut nichts und bringt dir keinen Vorteil. Was genau hast du denn vor? Ist das eine Uebungsaufgabe?
 

MarvinsDepression

Bekanntes Mitglied
GedankenExperiment: Ist das vorstellbar? Ich weiß, dass ich gleich eine Referenz erhalte (z.B. in einer if-Anweisung, oder einer Schleife. Nur kenne ich den konkreten Typ nicht. Diese Referenz möchte ichspäter weiter reichen...
Klar will ich das Object nicht haben. Mir fällt nur nix ein, wie ich darauf verzichten kann.
 

Robert Zenz

Top Contributor
Ach jetzt verstehe ich was du willst. Die Frage ist ob "A" und "B" etwas gemeinsam sein. Der Rueckgabewert von der Funktion muss der kleineste gemeinsame nenner von den beiden Typen sein.

Dennoch ergibt in deinem Fall es wenig Sinn dort einen generischen Typen einzusetzen, da kann man genauso gut direkt Object nehmen:

Java:
Object[] getData() {
    if (condition) {
        return new TypeA[];
    } else {
        return new TypeB[];
    }
}

void doSomething(Object[] data) {
    System.out.println(data[0].toString());
}

void main() {
    Object[] data = getData();
    doSomething(data);
}

Oder wenn du einen gemeinsame Grundtyp hast, zum Beispiel eine Schnittstelle auf welche du spezialisieren kannst:

Java:
Datending[] getData() {
    if (condition) {
        return new BesseresDatending[];
    } else {
        return new AnderesDatending[];
    }
}

void doSomething(Datending[] data) {
    System.out.println(data[0].toString());
}

void main() {
    Datending[] data = getData();
    doSomething(data);
}

In deinem Beispiel macht aber der Einsatz von generischen Typen einfach keinen Sinn.
 

Robert Zenz

Top Contributor
Also ein besseres Beispiel fuer generische Typen waere zum Beispiel das holen vom xten Objekt aus einem Array.

Java:
public <TYPE> getItem(TYPE[] types, int index) {
    return types[index];
}

BigDecimal bigDecimals = new BigDecimal[] { ... };
BigDecimal itemAtIndex = getItem(bigDecimals, index);

Random randoms = new Random[] { ... };
Random itemAtIndex = getItem(randoms, index);

Generische Typen verwendet man dann wenn man einen bestimmten Typen haben will, diesen aber zum Zeitpunkt des Code tippens aber nicht kennt. Primaer braucht man das dann wenn man einen Wert aus einer Funktion zurueckgeben will. Ein anderes gutes Beispiel ist einen List. Die haelt irgendwelche beliebigen Werte, aber wenn man get aufruft will man ja diesen Typen wieder haben mit welchem die Liste erstellt wurde, aber der Tipper von List kannte diese Typen ja nicht.
 

Neumi5694

Top Contributor
Vor Generics war alles Object ... deshalb schwirren im originalen Java-Code auch so viele Arrays rum anstatt Listen, da man den Arrays den Typ mitgeben konnte, Listen aber nicht.

Selbst gelangte man auch in Versuchung, "nicht ganz sauber" zu arbeiten. Ich hatte z.B. in einer Liste abwechselnd verschiedene Typen (Wertepaare) drin und kam mir dabei ziemlich genial vor :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
H Generics machen mich verrückt Java Basics - Anfänger-Themen 8
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
Cassy3 Generics - CompareTo Java Basics - Anfänger-Themen 21
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
districon Generics implementieren Java Basics - Anfänger-Themen 2
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Hilfe bei Generics Java Basics - Anfänger-Themen 11
G Generics Compilerfehler Java Basics - Anfänger-Themen 6
G Generics Methoden Java Basics - Anfänger-Themen 7
G Generics Java Basics - Anfänger-Themen 3
L Generics Tripel Java Basics - Anfänger-Themen 26
W Fragen zu Generics Java Basics - Anfänger-Themen 14
S Hilfe. Generics und BiFunctions Java Basics - Anfänger-Themen 10
X Wie Generics richtig benutzen ? Java Basics - Anfänger-Themen 5
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Java Generics factory method Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
I Generics und Comparable Java Basics - Anfänger-Themen 14
G Generics mit ? und Diamantoperator Java Basics - Anfänger-Themen 4
G Generics: Wildcard ? Java Basics - Anfänger-Themen 12
D Generics methode Java Basics - Anfänger-Themen 2
I Frage zu Generics und Wildcards Java Basics - Anfänger-Themen 2
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
A Generics Java Basics - Anfänger-Themen 6
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
W Generics - Typ zurückbekommen Java Basics - Anfänger-Themen 4
Dimax Erste Schritte Generics von Profis leicht erklärt Java Basics - Anfänger-Themen 7
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
J Collections Generics: Typ wird nicht erkannt Java Basics - Anfänger-Themen 7
D Generics ArrayList: Bug im Quellcode Java Basics - Anfänger-Themen 14
C Generics Java Basics - Anfänger-Themen 8
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
T Generics in Java... Java Basics - Anfänger-Themen 9
J Generics Java Basics - Anfänger-Themen 3
J Generics Datentypen vergleichen Java Basics - Anfänger-Themen 16
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
O Generics - Implementierung Java Basics - Anfänger-Themen 7
Shizmo Frage zu Generics Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
H Typsicherheit/Generics Java Basics - Anfänger-Themen 1
U Java generics funktioniert nicht Java Basics - Anfänger-Themen 0
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Generics Java Basics - Anfänger-Themen 4
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
R Compiler-Fehler Generics Problem Java Basics - Anfänger-Themen 2
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
K Generics bei Klassen- und Interfacedeklarationen Java Basics - Anfänger-Themen 3
D toArray und Generics Java Basics - Anfänger-Themen 2
D Zwei Generics beim Überladen von Methoden Java Basics - Anfänger-Themen 3
C Erste Schritte Filter für Generics oder ähnliches Java Basics - Anfänger-Themen 2
M Frage zu Generics-Deklaration Java Basics - Anfänger-Themen 5
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
J Java Generics - Frage zu Types Java Basics - Anfänger-Themen 2
M <T> Generics Java Basics - Anfänger-Themen 7
B Interface Generics: prüfen ob Interface deklariert wird Java Basics - Anfänger-Themen 18
T Polymorphie Generics-Problem Java Basics - Anfänger-Themen 2
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Array Generics Java Basics - Anfänger-Themen 3
J Generics casten Java Basics - Anfänger-Themen 14
J Generics wildcard Java Basics - Anfänger-Themen 6
E Listen und Generics Java Basics - Anfänger-Themen 9
X Generics Java Basics - Anfänger-Themen 6
M Datei einlesen mit generics? Java Basics - Anfänger-Themen 9
D Warum sind Generics mit Vorsicht zu genießen? Java Basics - Anfänger-Themen 6
M OOP Mit Generics auf Methoden zugreifen? Java Basics - Anfänger-Themen 10
S Generics Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
L Datentypen Problem mit Generics und null Java Basics - Anfänger-Themen 6
E Klassen java.util.ArrayList<E> als Generics Java Basics - Anfänger-Themen 16
W Interface Problem mit Generics Java Basics - Anfänger-Themen 2
M OOP Generics und Wildcards Java Basics - Anfänger-Themen 3
D Generics - Warnmeldungen Java Basics - Anfänger-Themen 2
M Polymorphie generics einsteigerprobleme Java Basics - Anfänger-Themen 3
D Vererbung Generics und Vererbung Java Basics - Anfänger-Themen 8
C Generics Array Java Basics - Anfänger-Themen 43
D Fehler mit generics Java Basics - Anfänger-Themen 10
S Generics - CaseInsensitiveMap selber schreiben? Java Basics - Anfänger-Themen 5
K Datentypen Generics Java Basics - Anfänger-Themen 3
P Comparable und Generics Java Basics - Anfänger-Themen 6
I Generics (Subtypen) Java Basics - Anfänger-Themen 17
N Typeinschränkung bei Generics Java Basics - Anfänger-Themen 13
C Generics und Cast Java Basics - Anfänger-Themen 5
H Generics werden in -source 1.2 nicht unterstützt Java Basics - Anfänger-Themen 16
M Datentypen Generics: Exacten Typ ermitteln Java Basics - Anfänger-Themen 6
N Generics und Interfaces Java Basics - Anfänger-Themen 5
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
lumo Java Generics Java Basics - Anfänger-Themen 19
M verlinkte Liste mit generics Java Basics - Anfänger-Themen 7
capgeti Datentypen Static methoden aus Superklasse mit Generics definieren? Java Basics - Anfänger-Themen 9
S Generics und Typerkennung Java Basics - Anfänger-Themen 7
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
B Java Listen und Generics Java Basics - Anfänger-Themen 35
O Abstract Method & Generics Java Basics - Anfänger-Themen 10
K Aufgabe Generics Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben