无法实例化List <Product>类型

Ema*_*uel 101 java ejb initialization list

我有以下代码:

List<Product> product = new List<Product>();
Run Code Online (Sandbox Code Playgroud)

错误:

Cannot instantiate the type List<Product>
Run Code Online (Sandbox Code Playgroud)

Product是我的EJB项目中的实体.为什么我收到此错误?

Mat*_*all 186

List是一个界面.接口无法实例化.只能实例化具体类型.你可能想使用ArrayList,这是一个实现了的List接口.

List<Product> products = new ArrayList<Product>();
Run Code Online (Sandbox Code Playgroud)


Mik*_*uel 17

使用具体的列表类型,例如,ArrayList而不是仅仅List.


Mec*_*kov 15

List是一个界面.你最后需要一个特定的类,所以要么尝试

List l = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

要么

List l = new LinkedList();
Run Code Online (Sandbox Code Playgroud)

适合您的需求.

  • 原始集合类型是危险的,不应使用或建议用于任何针对Java 5+的新代码,故事结尾. (3认同)

Kum*_*nav 8

List可以通过任何实现接口的类来实例化.通过这种方式,Java为我们提供了多态行为.参见下面的示例

List list = new ArrayList();

我没有直接实例化ArrayList,而是使用List来引用ArrayList对象,这样我们只使用List接口方法而不关心它的实际实现.

实现List的类的示例是ArrayList,LinkedList,Vector.您可能希望根据您的要求创建List.

例如: - 当你的hve做许多惰的或缺失.Arraylist是更密集的性能,因为它是由一个固定的大小数组支持和数组的内容必须通过移动或再生长的阵列被改变的链表是更加有用.

再次,使用List我们可以简单地更改我们的对象实例化,而无需在程序中进一步更改任何代码.

假设我们正在使用 ArrayList<String> value = new ArrayList<String>();

我们可能会使用ArrrayList的特定方法,而且代码不会很健壮

通过使用 List<String> value = new ArrayList<String>();

我们确保我们只使用List接口方法..如果我们想将它更改为LinkedList,我们只需更改代码: -

List value = new ArrayList();

------你的代码使用List接口方法.....

value = new LinkedList();

-----你的代码仍然使用List接口方法,我们不需要改变任何东西----我们不必在代码中进一步改变任何东西

顺便说一句,LinkedList也可以使用Deque,显然你也无法实例化,因为它也是一个接口