Moin zusammen,
ich habe eine Frage zum Thema Generics & Reflections.
Ich hätte gerne ein generisches Array:
Meine bisherige Lösung schaut wie folgt aus:
Die scheint auch zu funktionieren, nur frage ich mich: Gibts nich noch eine "schönere" Möglichkeit?
Ohne Annotationen ala SuppressWarnings?
Oder andersrum: Wie komme ich zur Laufzeit an den Typ von "c" mit Reflections?
Meine bisherigen Ideen waren sonst
Mit dem 2. Ansatz bekomm ich tatsächlich die konkrete Klasse. Hier könnte man wohl nun vielleicht dann mit nem Switch-Case das ganze Fortführen,
aber dann müsste man ja für jeden Typ einen Fall schreiben und das wäre dann ja nicht mehr wirklich "generisch"...
Hoffe mir kann jemand weiterhelfen!
ich habe eine Frage zum Thema Generics & Reflections.
Ich hätte gerne ein generisches Array:
Java:
public class GenericArray {
public static void main(String[] args) {
Array<String> stringArray = new Array<String>(String.class, 5);
Array<Integer> intArray = new Array<Integer>(Integer.class, 5);
}
}
Code:
public class Array <T> {
private T [] array;
public Array(Class<T> c, int size) {
}
Meine bisherige Lösung schaut wie folgt aus:
Code:
private T [] array;
@SuppressWarnings("unchecked")
public Arrayy(Class<T> c, int size) {
array = (T[]) Array.newInstance(c, size);
}
Die scheint auch zu funktionieren, nur frage ich mich: Gibts nich noch eine "schönere" Möglichkeit?
Ohne Annotationen ala SuppressWarnings?
Oder andersrum: Wie komme ich zur Laufzeit an den Typ von "c" mit Reflections?
Meine bisherigen Ideen waren sonst
Code:
public Arrayy(Class<T> c, int size) {
Type type = c.getGenericSuperclass();
System.out.println(type); // class java.lang.Object, class java.lang.Number
String type2 = c.getCanonicalName();
System.out.println(type2); // java.lang.String, java.lang.Integer
}
Mit dem 2. Ansatz bekomm ich tatsächlich die konkrete Klasse. Hier könnte man wohl nun vielleicht dann mit nem Switch-Case das ganze Fortführen,
aber dann müsste man ja für jeden Typ einen Fall schreiben und das wäre dann ja nicht mehr wirklich "generisch"...
Hoffe mir kann jemand weiterhelfen!