Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在下面的概念中,如果不在arraylist或LinkedList中创建对象,列表接口中的方法是如何实现的_Java_List_Selenium Webdriver_Arraylist_Linked List - Fatal编程技术网

Java 在下面的概念中,如果不在arraylist或LinkedList中创建对象,列表接口中的方法是如何实现的

Java 在下面的概念中,如果不在arraylist或LinkedList中创建对象,列表接口中的方法是如何实现的,java,list,selenium-webdriver,arraylist,linked-list,Java,List,Selenium Webdriver,Arraylist,Linked List,ListLElement=driver.findElements(按.tagname(“a”)) 在上面的例子中,driver.findElements将返回WebElement的列表,现在我们有了list的对象,即“leElement”,现在假设如果我想得到我可以在下面代码中使用的第一个元素 LElement.get(0) 但我的疑问是方法存在于列表接口中,因此我应该创建ArrayList或LinkedList的对象来实现此方法。但在上述情况下,我可以直接获得get方法的结果,而无需从Arra

ListLElement=driver.findElements(按.tagname(“a”))

在上面的例子中,driver.findElements将返回WebElement的列表,现在我们有了list的对象,即“leElement”,现在假设如果我想得到我可以在下面代码中使用的第一个元素 LElement.get(0)


但我的疑问是方法存在于列表接口中,因此我应该创建ArrayList或LinkedList的对象来实现此方法。但在上述情况下,我可以直接获得get方法的结果,而无需从ArrayList或LinkedList实现,也无需直接从接口实现。有人能解释一下吗?

此问题与selenium和在OOP中是一个称为多态性的概念

List
接口提供抽象方法,实现
List
的类应该为抽象方法提供实现主体。因此,
List
接口中的方法
get()
在类
ArrayList
List
接口的其他实现中实现
ArrayList
是一种
列表
,因此我们可以有如下内容:

List<WebElement> webElements = new ArrayList<>();
public ArrayList<WebElement> findElements(input..){
它将与ArrayList紧密耦合,每个人都必须从一开始就使用ArrayList才能使用该API的方法,这是不可取的

更好的解决方案是使用一些抽象概念来表示
ArrayList
,它原来是
列表
接口

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

     webElements.addAll(some operations to populate the list)

     return webElements;
}
public List findElements(输入..){
List webElements=new ArrayList();
addAll(填充列表的一些操作)
返回webElements;
}
这个更灵活,怎么办?比如说,在发布应用程序后,我们推断ArrayList的实现不是我们用于该用例的最佳选择,我们希望使用LinkedList。使用编写API的第一种方法,API的使用者也必须从自己的角度进行更改。使用更好的方式,他们不需要做任何事情:)

列表仍然是ArrayList的一个实例;在提供的示例中。Selenium一定实现了类似的功能。当我们调用
findElements
时,我们得到了List的一个具体实现,只是我们不知道我们得到的是什么实现类,但我们知道它为List接口中的抽象方法提供了实现体,我们可以使用它们