我有以下代码:
List<Product> product = new List<Product>();
错误信息:
Cannot instantiate the type List<Product>
Product
是我EJB项目中的一个实体。为什么会出现这个错误?
我有以下代码:
List<Product> product = new List<Product>();
错误信息:
Cannot instantiate the type List<Product>
Product
是我EJB项目中的一个实体。为什么会出现这个错误?
List
是一个接口。接口不能被实例化,只有具体的类型可以被实例化。你可能想使用一个 ArrayList
,它是 List
接口的一种实现。
List<Product> products = new ArrayList<Product>();
使用具体的列表类型,例如ArrayList
,而不是仅使用List
。
List是一个接口。最终你需要一个具体的类,因此尝试使用
List l = new ArrayList();
或者List l = new LinkedList();
无论哪种都能满足您的需求。
任何实现接口的类都可以实例化List。这样,Java为我们提供了多态行为。请参见下面的示例:
List<String> list = new ArrayList<String>();
我使用List来引用ArrayList对象,而不是直接实例化一个ArrayList,这样我们就只使用List接口方法,不关心其实际实现。
实现List接口的类的示例包括ArrayList、LinkedList、Vector。根据需要创建相应的List。
例如:当你需要进行多次插入或删除时,LinkedList更有用。由于ArrayList由固定大小的数组支持,并且必须通过移动或重新增长数组来更改数组内容,因此它更加消耗性能。
同样,使用List,我们可以简单地更改对象实例化,而无需在程序中进一步更改任何代码。
假设我们正在使用ArrayList<String> value = new ArrayList<String>();
我们可能会使用ArrayList的特定方法,而代码将不够健壮。
通过使用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),
};
:)
,就会知道这是真的。 - Matt Ball