Базовая логика такого поведения заключается в том, что Generics
следует механизму стирания типа. Поэтому во время выполнения вы не можете определить тип collection
в отличие от arrays
, где нет такого процесса стирания. Итак, вернемся к вашему вопросу ...
Итак, предположим, что существует метод, приведенный ниже:
add(List<Animal>){
//You can add List<Dog or List<Cat> and this will compile as per rules of polymorphism
}
Теперь, если java позволяет вызывающему добавить список типов Animal к этому методу то вы можете добавить неправильную вещь в коллекцию, и во время выполнения тоже она будет запущена из-за стирания типа. В то время как в случае массивов вы получите исключение времени выполнения для таких сценариев ...
Таким образом, по существу это поведение реализовано таким образом, что нельзя добавлять неправильную вещь в коллекцию. Теперь я считаю, что стирание стилей существует, чтобы обеспечить совместимость с устаревшим java без дженериков ....
Caused by: android.os.NetworkOnMainThreadException
Вы не можете выполнить сетевой ввод-вывод в основном потоке. Переместите его в AsyncTask или поток.