Generischer Type instanziieren
-
Folgendes:
class Foo { public Foo(String name){...} } class Bar<T extends Foo> { public T Create(String name) { T t = T.class.getConstructor(String.class).newInstance(name); return t; } }
hier bekomm ich bei der instaziierung foolgender compilerfehler:
java: cannot select from a type variable
gehts das überhaupt??
-
So was funktioniert nicht, da die Typen zur Laufzeit gelöscht werden. Java kann dann nicht wissen, was T für ein Typ ist und demzufolge auch keine neuen Objekte des Typs erzeugen. Du kannst lediglich ein Class-Exemplar in die Create-Methode übergeben:
/** */ @Test public void test() throws Exception { Bar<Foo> b = new Bar<>(); b.Create(Foo.class, "Hallo"); } static class Foo { public Foo(String name){} } static class Bar<T extends Foo> { public T Create(Class<T> c, String name) throws Exception { T t = c.getConstructor(String.class).newInstance(name); return t; } }