为什么我们可以直接使用作为接口的对象?

时间:2019-02-11 14:08:03

标签: java collections interface

当它是接口时,如何直接使用方法返回的列表,方法的返回类型的确是布尔列表,我可以使用它,我认为不能直接使用接口而且必须使用非抽象类来实现它们,这实际上是我在所有地方看到的。

示例:

List<Boolean> booleanList = getBooleanList();
booleanList.get(0);

很抱歉,这个问题,我不了解这个概念,请投票删除,我将其删除。

2 个答案:

答案 0 :(得分:3)

好吧,当您使用List类型的对象时,实际上是在使用实现。哪个执行?不知道,不在乎,但是您没有使用List对象,而是使用实现List接口的对象。

答案 1 :(得分:3)

您没有使用$3 ↓ $1 类型的object,而是使用了List类型的引用。无论如何,List本身将是一个具体的实现。

object

某些IDE甚至可以向您显示实际的对象类型:

enter image description here

您可以将public List<String> getNames() { final List<String> names = new ArrayList<>(); names.add("x"); names.add("y"); return names; } public void process() { // In fact, there is an ArraysList final List<String> names = getNames(); } 引用类型用作使用者,直到API返回List类型为止,但是您需要了解应该在什么地方提供实现。

实际上,这也是一个可行的示例:

List

正如您所看到的,即使顶级接口也可以用作引用类型,因为public List<String> getNames() { final List<String> names = new ArrayList<>(); names.add("x"); names.add("y"); return names; } public void process() { // In fact, there is an ArraysList final Iterable<String> names = getNames(); } List都是ArrayList