JDK1.5 generic explanations and examples