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();
}
}