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

时间:2015-07-22 09:01:47

标签: java arraylist

Iterable<Board> theNeighbors = new ArrayList<Board>();

这是ArrayList theNeighbors的初始化,它使用interafce Iterable进行声明。但是,当我将方法add()用于刚刚构建的变量时,编译器会发出警报

  

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

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

List<Board> theNeighbors = new ArrayList<Board>();

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

1 个答案:

答案 0 :(得分:34)

如果您阅读Iterable界面的documentation,您会看到,如您所述,add()方法不存在。

  

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

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

当您宣布ArrayList时,这样:

Iterable<Board> theNeighbors = new ArrayList<Board>();

JVM将theNeighbors视为Iterable,因此无法找到add()方法。另一方面,如果您以这种方式定义ArrayList

List<Board> theNeighbors = new ArrayList<Board>();

然后JVM 可以找到add()方法,因为所有类型的List都有此方法(和行为)。