web-dev-qa-db-ja.com

タイプList <Product>をインスタンス化できません

私は次のコードを持っています:

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

エラー:

Cannot instantiate the type List<Product>

Productは、EJBプロジェクトのエンティティです。なぜこのエラーが発生するのですか?

98
Emanuel

Listはインターフェイスです 。インターフェイスをインスタンス化することはできません。インスタンス化できるのは、具体的なタイプのみです。おそらく ArrayList を使用する必要があります。これは、Listインターフェイスの実装です。

List<Product> products = new ArrayList<Product>();
182
Matt Ball

具体的なリストタイプを使用します。 ArrayListだけでなく、List

17
Mike Samuel

リストはインターフェースです。最後に特定のクラスが必要なので、試してみてください

List l = new ArrayList();

または

List l = new LinkedList();

ニーズに合ったもの。

15
Mechkov

リストは、インターフェースを実装する任意のクラスによってインスタンス化できます。この方法により、Javaはポリモーフィックな動作を提供します。以下の例を参照してください。

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

ArrayListを直接インスタンス化する代わりに、Listを使用してArrayListオブジェクトを参照しているため、Listインターフェイスメソッドのみを使用し、実際の実装については気にしません。

Listを実装するクラスの例は、ArrayList、LinkedList、Vectorです。要件に応じてListを作成することをお勧めします。

例:-LinkedListは、多くの不活性化または削除を行う場合に役立ちます。Arraylistは、固定サイズの配列に支えられており、配列の移動または再成長によって配列の内容を変更する必要があるため、パフォーマンスがより集中します。

繰り返しになりますが、リストを使用すると、プログラムでコードをさらに変更することなく、オブジェクトのインスタンス化を簡単に変更できます。

ArrayList<String> value = new ArrayList<String>();を使用しているとします

arrrayListの特定のメソッドを使用できますが、出力コードは堅牢ではありません

List<String> value = new ArrayList<String>();を使用して

listインターフェイスメソッドのみを使用していることを確認しています。LinkedListに変更する場合は、コードを変更するだけです。

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

------あなたのコードはListインターフェースメソッドを使用しています.....

value = new LinkedList<String>(); 

-----あなたのコードはまだListインターフェースメソッドを使用しており、何も変更する必要はありません----そして私たちはコード内でさらに何も変更する必要はありません

ちなみに、LinkedListはDequeでも機能します。これは明らかにインターフェースでもあるため、インスタンス化できません。

8
Tech Geek

インターフェイスを直接インスタンス化することはできません。そのようなインターフェイスを実装するクラスをインスタンス化する必要があります。

これを試して:

NameValuePair[] params = new BasicNameValuePair[] {
        new BasicNameValuePair("param1", param1),
        new BasicNameValuePair("param2", param2),
};
1
pancho.gb.cu