无法实例化 List < Product > 类型

我有以下密码:

List<Product> product = new List<Product>();

错误是:

Cannot instantiate the type List<Product>

Product是我的 EJB 项目中的一个实体。为什么我会得到这个错误?

184320 次浏览

List是一个接口 。不能实例化接口。只能实例化具体类型。您可能希望使用 ArrayList,它是 List接口的 实施

List<Product> products = new ArrayList<Product>();

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

列表是一个接口。您最终需要一个特定的类,因此 要么试试

List l = new ArrayList();

或者

List l = new LinkedList();

只要你需要。

List 可以通过实现接口的任何类来实例化。通过这种方式,Java 为我们提供了多态行为:

List<String> list = new ArrayList<String>();

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

实现 List 的类有 ArrayList、 LinkedList、 Vector。

示例:-当您必须执行许多惰性操作或删除操作时,LinkedList 更有用。Arraylist 的性能要求更高,因为它由一个固定大小的数组支持,并且必须通过移动或重新生成数组来更改数组内容。

同样,使用 List 我们可以简单地更改对象实例化,而不需要进一步更改程序中的任何代码。

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

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

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

我们确保只使用 List 接口方法。.如果我们想把它变成一个 LinkedList,我们只需要改变代码:

List<String> value = new ArrayList<String>();

——您的代码使用 List 接口方法... ..。

value = new LinkedList<String>();

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

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

不能直接实例化接口,应该实例化实现此类接口的类。

试试这个:

NameValuePair[] params = new BasicNameValuePair[] {
new BasicNameValuePair("param1", param1),
new BasicNameValuePair("param2", param2),
};