当前位置: 首页 > 面试题库 >

我应该将ArrayList声明/初始化为以下各项的列表,ArrayList或ArrayLists:

司空炯
2023-03-14
问题内容

这样声明一个集合有什么区别

public class CatHerder{
    private List cats;
    public CatHerder(){
        this.cats = new ArrayList<Cat>();
    }
}
//or
public class CatHerder{
    private ArrayList cats;
    public CatHerder(){
        this.cats = new ArrayList();
    }
}
//or
public class CatHerder{
    private ArrayList<Cat> cats;
    public CatHerder(){
        this.cats = new ArrayList<Cat>();
    }
}

问题答案:

您应该将其声明List<Cat>,并将其初始化为ArrayList<Cat>

List是一个接口,并且ArrayList是一个实现类。相对于接口而不是实现,几乎总是比较可取的。这样,如果您以后需要更改实现,则不会破坏使用该接口进行编码的使用者。

根据您实际使用列表的方式,您甚至可以使用不太具体的列表java.util.CollectionList扩展的接口)。

至于List<Cat>(您可以将其读为“猫的清单”)vs
List:这是Java的泛型,可以确保安全地编译时类型。简而言之,它使编译器确保List仅包含Cat对象。

public class CatHerder{
    private final List<Cat> cats;
    public CatHerder(){
        this.cats = new ArrayList<Cat>();
    }
}


 类似资料:
  • 为什么我可以初始化ArrayList,如下所示: 但在使用时出错:

  • 我有一个非常基本的问题。我需要如何为ArrayList键入parrameters才能在BlueJ中使用代码?我有一个方法如下。

  • 问题内容: 这两个声明之间有什么区别? 宣言1: 宣言2: 问题答案: 这是通用的,您想在将实现细节返回给客户端时隐藏实现细节,以后可以将实现从透明地更改为。 在设计库等的情况下,此机制很有用,这些库可能会在某个时间点更改其实现详细信息,而对客户端的更改最少。 这是您始终需要返回的要求。在某些时候,如果您想将实现细节更改为,也应在客户端进行更改以代替。

  • 这两种声明之间有什么区别? 宣言1: 宣言2:

  • 问题内容: 众所周知,arraylist是init。应该是这样的 那么,为什么Java允许这些? 那么,如果它们是正确的,为什么不允许这些? 编译器消息是:ArrayList类型的方法add(int,capture#1-of?extended Object)不适用于参数(int) 更一般 我读到了这件事,但很高兴收到您的来信。谢谢 另一个有趣的地方是: 问题答案: 您不能为类型的引用分配,因为它允