Java type inference is broken: can we fix it?
Featherweight Java: a minimal core calculus for Java and GJ