在列表接口中呈现的方法如何实现而不在arraylist或linkedlist中创建对象

wgx48brx  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(404)

listlelelement=driver.findelements(按.tagname(“a”));
在上面的例子中,driver.findelements将返回webelement的列表,现在我们有了list的对象“lelement”,现在假设如果我想得到第一个元素,我可以使用下面的代码lelement.get(0);
但我怀疑get()方法存在于list接口中,所以我应该创建arraylist或linkedlist的对象来实现这个方法..但是在上面的情况下,我可以直接得到get方法的结果,而不需要从arraylist或linked list实现,直接从接口实现..有人能解释一下吗?

0mkxixxg

0mkxixxg1#

这个问题与 selenium 无关,在oop中是一个称为多态性的概念。
这个 List 接口提供抽象方法和实现 List 应该为抽象方法提供一个实现体。因此方法 get()List 接口在类中实现 ArrayList 以及 List 接口。 ArrayList 是一种 List ,因此我们可以得到这样的结果:

List<WebElement> webElements = new ArrayList<>();

现在假设我想创建api findElements 对于 selenium 。如果我创建如下方法:

public ArrayList<WebElement> findElements(input..){

它将与arraylist紧密耦合,每个人都必须从头开始使用arraylist才能使用该api的方法,这是不可取的。
更好的解决方案是使用一些抽象概念来表示 ArrayList ,结果是 List 接口。

public List<WebElement> findElements(input..){
     List<WebElements> webElements = new ArrayList<>();

     webElements.addAll(some operations to populate the list)

     return webElements;
}

这个比较灵活,怎么样?假设在发布应用程序之后,我们推断arraylist的实现并不是我们用于该用例的最佳选择,我们希望使用linkedlist。使用第一种编写api的方法,api的使用者也必须从自己的Angular 进行更改。使用更好的方法,他们不需要做任何事情:)
列表仍然是arraylist的一个示例;在提供的示例中。selenium肯定实现了类似的功能。当我们调用 findElements ,只是我们不知道我们得到了什么实现类,但是我们知道它为列表接口中的抽象方法提供了实现体,我们可以使用它们。

相关问题