Freitag, 16. Oktober 2015

Java Generics und der Type-Witness

Die Typ-Inferenz von Java versucht den Typ eines Generics anhand der bekannten Typinformationen auszuwerten. Dies kann jedoch in bestimmten Fällen schief gehen.

So funktioniert zwar folgendes Beispiel:
private void f(List<String> l) {
  // TODO 
}

List<String> l = Collections.emptyList();
f(l);
Wird die leere Liste aber direkt verwendet, schlägt die Typ-Inferenz mit der Fehlermeldung "The method f is not applicable for the arguments List<Object>" fehl:
f(Collections.emptyList());
Die Lösung ist, hier einen Type-Witness einzusetzen:
f(Collections.<String>emptyList());