【问题标题】:how list methods work? [duplicate]列表方法如何工作? [复制]
【发布时间】:2012-12-24 12:24:32
【问题描述】:

可能重复:
How list methods works in java

List是java中的一个接口。它有一些方法。通常,接口是方法原型的规范。即接口仅由方法签名组成,接口中的方法没有实现。

如果 List 接口的方法在接口内部没有任何实现,我怀疑它们是如何工作的。

假设我有一个类 Book,它具有 name 属性、setter、getter 方法。我还有另外一堂 getBooks 这样的课。

public class GetBooks{
List<Book> list;
public List<Book> getBooks(){
return list;
}
//setter method..
}

我在运行时通过其他类将书籍发送到 set 方法。

我还有一堂这样的 UseBooks。

public class UseBooks{
.....
....
List<Book> list = new GetBooks().getBooks();
list.add(new Book("aaa"));
}

我的问题是 add 方法如何添加书籍,即使它在接口 List 中,因为我的 getBooks() 返回 List 接口而不是 Arraylist 或其他一些实现类。

【问题讨论】:

  • 您将始终拥有 List-Methods 的实现。
  • List&lt;Book&gt; list = new GetBooks().getBooks(); 不会编译。
  • List 是一个接口,您将创建具有 ArrayList 等实现的新对象,而 ArrayList 是一个扩展 List 接口的类,它确实具有接口方法的完整实现。
  • 您已经问过这个问题,并得到了答案。你真的真的需要阅读 oracle 提供的教程或购买一本好的 Java 初学者书籍。
  • @Karthik 代码(想法)编译正确,但总是会得到 NPE。

标签: java jakarta-ee


【解决方案1】:

是的,您需要创建一个图书列表对象,如下所示

//list as object
List<Book> list = new ArrayList<Book>();

//get your data

List<Book> temp = getBooks();

//now add another List of records to list

list.addAll(temp);

注意:= 正如您所说,您将通过 getBooks() 方法获取图书列表,所以我在示例中进行了解释

【讨论】:

    【解决方案2】:
    List<Book> list
    

    这里的列表是对对象的引用,而不是对象本身。当你在这个引用上调用接口方法时,你实际上是在调用这个引用指向的某个具体类的重写方法。

    为了说明

    List<Book> list = new List<Book>(); //Illegal
    List<Book> list = new ArrayList<Book>(); //legal ArrayList is a concrete implementation of list.
    

    这就是接口的力量,我可以用这个参考做一些事情,而不用担心它是如何工作的或如何实现的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 2020-03-26
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多