使用List时IndirectList未实例化,但在使用ArrayList时它可以正常工作

时间:2018-04-16 22:52:42

标签: java list arraylist

在使用带有框架JSF的List或ArrayList时,我遇到了一些困惑 我曾经使用定义的ArrayList工作direclty:

@OneToMany
ArrayList<Book>books;

在一些控制者中,我可以这样做:user.getBooks();,我会得到我的清单中的元素,这很好

但是当我使用List而不是ArrayList时会发生不同的事情:

@OneToMany
List<Book>books;

如果我尝试:user.getBooks();我会得到:IndirectList: not instantiated 如果我这样做,我只能获得列表:FetchType.EAGER

有人可以解释我的区别吗?

1 个答案:

答案 0 :(得分:0)

框架可以实例化ArrayList。但是List无法实例化;这是一个界面。通过执行以下操作来使用List:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "otherEntity")
private List<String> components = new ArrayList<>();

在变量声明或构造函数中初始化集合总是一个好主意,以避免NPE。