http://stackoverflow.com/questions/16898342/java-generics-failure-to-provide-type-safety