Ab und an habe ich das Problem, bei Klassen mit Generics eine Instanz des Generics erstellen zu wollen. Das funktioniert leider nicht direkt:
T newObject = new T();
Also muss man um das Problem herumprogrammieren.
Üblicherweise wird die Übergabe einer Klasse empfohlen, die für die Instanziierung genutzt wird. Die Lösung finde ich häßlich, unschön und unelegant.
Java 8 bietet mit der Einführung von Lambdas und entsprechenden Hilfsklassen eine elegantere Möglichkeit, die ich derzeit bevorzuge.
Ich habe das Problem und die Lösungen auf ekkart.de beschrieben: http://www.ekkart.de/computer/programmierung/java/generics.html
Hier die von mir präferierte Lösung:
public class GenericClass<T extends Object> { private Supplier<T> instanceCall = null; public void init(final Supplier<T> theInstanceCall) { instanceCall = theInstanceCall; } public T getInstance() { return instanceCall.get(); } } public class ObjectFactory { public Integer createInteger() { return new Integer(); } } public class Test { public void testGenerics() { GenericClass<Integer> testObject = new GenericClass<>(); ObjectFactory factory = new ObjectFactory(); testObject.init(factory::createInteger); Integer a = testObject.getInstance(); } }