Java: Instanzen von Generics

 2. Januar 2018 •  Ekkart •  generics, java •  ToDo

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

}