我可以以这种方式声明数组列表吗?

2022-09-04 06:08:11
Iterable<Board> theNeighbors = new ArrayList<Board>();

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

Board.java:78: error: 找不到符号 theNeighbors.add(nb);^
符号: 方法 add(Board)
位置: 变量 theNeighbors of type Iterable

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

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

该方法运行良好。您为声明选择的接口是否始终具有以后要调用的方法?add()


答案 1

如果您阅读该接口的文档,您将看到,如前所述,该方法不存在。Iterableadd()

您为声明选择的接口是否始终具有以后要调用的方法?

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

当你声明你喜欢这样:ArrayList

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

JVM 被视为 一个,因此找不到该方法。另一方面,如果您以这种方式定义:theNeighborsIterableadd()ArrayList

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

那么JVM可以找到一个方法,因为所有类型的都有这个方法(和行为)。add()List


答案 2

推荐