Java 在下面的概念中,如果不在arraylist或LinkedList中创建对象,列表接口中的方法是如何实现的
ListJava 在下面的概念中,如果不在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
但我的疑问是方法存在于列表接口中,因此我应该创建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接口中的抽象方法提供了实现体,我们可以使用它们