Skip to content

Instantly share code, notes, and snippets.

@dgageot
Created June 22, 2013 08:57
Show Gist options
  • Save dgageot/5840050 to your computer and use it in GitHub Desktop.
Save dgageot/5840050 to your computer and use it in GitHub Desktop.
Oops, a Lambda tends to forget what's its type.
public class Types {
interface SMI<T> {
T get(T value);
}
public static void main(String[] args) {
SMI<String> inner = new SMI<String>() {
@Override
public String get(String param) {
return param;
}
};
SMI<String> lambda = (String param) -> param;
// public java.lang.String Types$1.get(java.lang.String)
System.out.println(inner.getClass().getDeclaredMethods()[0]); // Types are OK
// Types.Types$SMI<java.lang.String>
System.out.println(inner.getClass().getGenericInterfaces()[0]); // Types are OK
// public java.lang.Object Types$$Lambda$1.get(java.lang.Object)
System.out.println(lambda.getClass().getDeclaredMethods()[0]); // Oops... Types are erased
// interface Types$SMI
System.out.println(lambda.getClass().getGenericInterfaces()[0]); // Oops... Types are erased
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment