我可以用这种方式声明ArrayList吗?

ton*_*bra 13 java arraylist

Iterable<Board> theNeighbors = new ArrayList<Board>();
Run Code Online (Sandbox Code Playgroud)

这是我对ArrayListtheNeighbors的初始化,它使用了interafce Iterable进行声明.但是,当我使用方法add()来构建我刚刚构建的变量时,编译器会发出警报

Board.java:78:错误:找不到符号theNeighbors.add(nb); ^
符号:方法添加(Board)
位置:变量类型Iterable的邻居

是什么让它发生?在我使用的另一种情况

List<Board> theNeighbors = new ArrayList<Board>();
Run Code Online (Sandbox Code Playgroud)

add()方法效果很好.您为声明选择的界面是否应始终具有您稍后要调用的方法?

Tim*_*sen 34

如果你阅读文档Iterable界面,你会看到,正如你提到的,该add()方法不存在.

您为声明选择的界面是否应始终具有您稍后要调用的方法?

您选择的界面应该具有您计划实例化和使用的对象的所有行为.

当你宣布ArrayList这样的时候:

Iterable<Board> theNeighbors = new ArrayList<Board>();
Run Code Online (Sandbox Code Playgroud)

JVM视为theNeighbors一个Iterable,因此无法找到该add()方法.另一方面,如果你这样定义ArrayList:

List<Board> theNeighbors = new ArrayList<Board>();
Run Code Online (Sandbox Code Playgroud)

然后JVM 可以找到一个add()方法,因为所有类型List都有这个方法(和行为).