При поиске (тестировании) информации по другому вопросу я наткнулся на что-то и не имел понятия, почему это происходит. Теперь я знаю, что нет практических оснований для этого, и что это абсолютно ужасный код, но почему это работает:
ArrayList<Quod> test=new ArrayList<Quod>();
ArrayList obj=new ArrayList();
test=obj;
obj.add(new Object());
System.out.println(test.get(0));
Итак, в основном, я добавляю Object в ArrayList of Quods. Теперь я вижу, как у java нет возможности эффективно проверять это, потому что ему придется просматривать все ссылки, которые, вероятно, даже не хранятся нигде. Но почему это работает get(). Не кажется ли get() возвращать экземпляр Quod, как говорится, когда вы наводите на него курсор в Eclipse? Если он может вернуть объект, который является только объектом, когда он обещал вернуть объект типа Quod, почему я не могу вернуть String, когда я говорю, что верну int?
И все становится еще страннее. Это приведет к сбою, поскольку предполагается, что с ошибкой во время выполнения (ошибка java.lang.ClassCastException) (!?!?):
ArrayList<Quod> test=new ArrayList<Quod>();
ArrayList obj=new ArrayList();
test=obj;
obj.add(new Object());
System.out.println(test.get(0).toString());
Почему я не могу вызвать toString для объекта? И почему это прекрасно для метода println() для вызова его toString, но не для меня непосредственно?
EDIT: Я знаю, что я ничего не делаю с первым экземпляром ArrayList, который я создаю, поэтому это просто пустая трата времени обработки.
EDIT: Я использую Eclipse на Java 1.6. Другие сказали, что они получают одинаковые результаты в Eclipse, работающем с java 1.8. Однако на некоторых других компиляторах в обоих случаях возникает ошибка CCE.