Reflection und Generic

stephanie

Aktives Mitglied
Hallo Leute,

ich habe irgendwie immer nicht die Generics und Reflection verstanden. Was sind sie eigentlich? Wozu brauchen wir sie? Ich bitte um eine gute Erklärung.
 
Generics: Galileo Computing :: Java ist auch eine Insel - 3 Klassen und Objekte
Die sind dazu da, um den Programmierern aufzuzeigen, was für Typen erwartet werden. Z.B. definiert man keine [c]List[/c], welche Objects kriegt und wieder zurückgibt (und dann gecastet werden müssen), sondern man definiert eine [c]List<String>[/c] und weiss überall, dass es Strings beinhaltet.

Reflection: Zur Laufzeit Methoden, Variablen von Objekten auslesen und aufrufen.
 
Generics: Galileo Computing :: Java ist auch eine Insel - 3 Klassen und Objekte
Die sind dazu da, um den Programmierern aufzuzeigen, was für Typen erwartet werden. Z.B. definiert man keine [c]List[/c], welche Objects kriegt und wieder zurückgibt (und dann gecastet werden müssen), sondern man definiert eine [c]List<String>[/c] und weiss überall, dass es Strings beinhaltet.

Reflection: Zur Laufzeit Methoden, Variablen von Objekten auslesen und aufrufen.

Zum Beispiel habe ich eine Klasse mit der Namen "Scool" erstellt und die klasse hat als methode zum Beispiel "getName()", "getStudentZahle()", "getOrt()" usw.. Wenn ich die Methoden von dieser Klasse brauche, dann kann ich "Class" aufrufen. Aber ich kann die Methoden Klassenname.Mthode auch machen. Warum nutze ich "Class"?

Und zweitens : heisst Geneeric nur List<String> oder irgendetwas z.B. Set<KlasseName> usw.???
 
Moin,

Zum Beispiel habe ich eine Klasse mit der Namen "Scool" erstellt und die klasse hat als methode zum Beispiel "getName()", "getStudentZahle()", "getOrt()" usw.. Wenn ich die Methoden von dieser Klasse brauche, dann kann ich "Class" aufrufen. Aber ich kann die Methoden Klassenname.Mthode auch machen. Warum nutze ich "Class"?
Bitte was ???:L
<class> deklarierte eine Klasse - oder was ist die Frage ???:L 😱

Und zweitens : heisst Geneeric nur List<String> oder irgendetwas z.B. Set<KlasseName> usw.???
allgemeiner heißt es "ObjectType<DataType>" ...
Will sagen, Du hast einen Objekttyp (egal ob Liste, Map, Vector oder sonst was), der wiederum nur Objekte von deklarierten Datentyp aufnehmen kann (dies können ggf. auch eigene Konstrukte sein) !

Gruß
Klaus
 
Natürlich, du kannst da machen was du willst. Auch eigene Klassen mit Generics implementieren. Z.B. einfach eine Klasse, welche irgendeinen Wert speichert (also einen Wrapper):
Java:
public class Wrapper<T> {

    private T data;

    public void setData(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }
}

Dann kannst du so was machen:
Java:
Wrapper<String> w = new Wrapper<String>();
w.setData("test");
String result = w.getData(); // gibt wieder einen String zurück
 
Moin,


Bitte was ???:L
<class> deklarierte eine Klasse - oder was ist die Frage ???:L 😱


allgemeiner heißt es "ObjectType<DataType>" ...
Will sagen, Du hast einen Objekttyp (egal ob Liste, Map, Vector oder sonst was), der wiederum nur Objekte von deklarierten Datentyp aufnehmen kann (dies können ggf. auch eigene Konstrukte sein) !

Gruß
Klaus

Ich wollte sagen, warum brauchen wir Reflektion die Eigenschaften einer Klasse aufzurufen? Das können wir mit "."Notation auch schaffen?
 
Zuletzt bearbeitet:
Natürlich, du kannst da machen was du willst. Auch eigene Klassen mit Generics implementieren. Z.B. einfach eine Klasse, welche irgendeinen Wert speichert (also einen Wrapper):
Java:
public class Wrapper<T> {

    private T data;

    public void setData(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }
}

Dann kannst du so was machen:
Java:
Wrapper<String> w = new Wrapper<String>();
w.setData("test");
String result = w.getData(); // gibt wieder einen String zurück
Ach, ich glaube verstanden 😉. Das heisst, ich kann meine eigene Klassen erstellen, die z.B. Integer, String oder irgenetwas type sein können. Dann, wenn ich etwa ein Variable vom Tpye String erstellen möchte, kann meine eigene Klasse nutzen.Stimmt?
 
Ich wollte sagen, warum brauchen wir Reflektion die Eigenschaften einer Klasse aufzurufen? Das können wir mit "."Notation auch schaffen?
Mit der .-Notation kannst du das nur machen, wenn du schon weiß, welche Klassen und Methoden dein Objekt hat. Manchmal weiß man das aber nicht zur Compile-Zeit, sondern kann es erst zur Laufzeit herausfinden - dazu dient dann die Reflection.
 

Zurück
Oben