Очень простой.
String strings[] = {"Broken","Type", "system"};
Object objects[] = strings;
objects[0] = 5; // compiles fine, but throws ArrayStoreException at runtime
Ковариантные типы не так уж плохи, пока вы что-то вынимаете, но в тот момент, когда вы что-то вставляете, все ломается. Представьте, что у вас есть метод, который принимает Object[] в качестве параметра.
fn(Object[]a){
...
}
не было бы неплохо иметь возможность называть это с помощью String[]
?
String[] s = {"I","didn't","know","that","this","was","broken"}
fn(s);
Ну, это звучит естественно, особенно в первые дни, когда у нас не было дженериков в языке. И все это прекрасно работает до тех пор, пока ничего не мутирует, а Java не предоставляет никакого механизма, гарантирующего это.
Вы всегда должны отдавать предпочтение Lists
, а не arrays
, потому что Lists
используют generics
, которые являются инвариантными.
person
Sleiman Jneidi
schedule
17.02.2015