No promiňte, ale jak koukám na tu diskuzi tak si nikdo i včetně autora článku nikdo nevšiml (tragikomedie je že to neví i lidi z coinu:-( ) že v části 5. Je operátor <> skutečně nezbytný a/nebo dostatečně obecný?
má chybu a to takovou že lze zapsat... viz jednoduchý test:
//kompilováno pod jdk6, javac kompilátor pouze upozorní na potenciální //unsafe operaci
public class CollectionTest {
@Test
public void testType() {
List<String> list = new ArrayList();
List<List<String>> list2 = new ArrayList();
List<List<List<String>>> list3 = new ArrayList();
Map<String, Collection<Integer>> map = new LinkedHashMap();
//list.add(new Integer(1));//nejde zkompilovat
list.add(String.valueOf("hello"));//toto jo
//list2.add(new Integer(2));//nejde zkompilovat
list2.add(new ArrayList());//tohle jo ! všimně te si že se nekontroluje typ !!!
List beztypovyList = list;
beztypovyList.add(new Integer(3)); //tohle projde i s tím pitomým diamantem!!!
//tohle projde
for (Object object : beztypovyList) {
System.out.println(object);
}
//tohle NEprojde ale spadne ! a spadne to i s tím pitomým diamantem!!!
for (String object : list) { //java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
System.out.println(object);
}
}
}