我应该将ArrayLists声明/初始化为<Cat>的列表,数组列表或数组列表

dav*_*nes 12 java collections list arraylist

声明集合的区别是什么

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>();
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*all 22

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

List是一个接口,ArrayList是一个实现类.对接口而不是实现进行编码几乎总是更可取.这样,如果您需要稍后更改实现,它将不会破坏针对该接口编码的消费者.

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

至于List<Cat>(您可以将其视为"cat of list")vs List:这是Java的泛型,它可以安全地确保编译时类型.简而言之,它允许编译器确保List只包含Cat对象.


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

  • 如果只在构造函数中设置它,则将其标记为final. (2认同)