Ответ 1
Если вы прочитали документацию для интерфейса Iterable
, вы увидите, как вы сказали, что метод add()
не существует.
Правда ли, что интерфейс, который вы выбираете для объявления, должен всегда иметь метод, который вы хотите назвать позже?
Выбранный интерфейс должен иметь все поведение объекта, который вы планируете создавать и использовать.
Когда вы объявляете свой ArrayList
следующим образом:
Iterable<Board> theNeighbors = new ArrayList<Board>();
JVM рассматривает theNeighbors
как Iterable
и поэтому не может найти метод add()
. С другой стороны, если вы определяете свой ArrayList
следующим образом:
List<Board> theNeighbors = new ArrayList<Board>();
тогда JVM может найти метод add()
, поскольку все типы List
имеют этот метод (и поведение).