web-dev-qa-db-ja.com

List <Object>およびList <?>

私は2つの質問があります、実際に...最初に、なぜ私はこれを行うことができません:

List<Object> object = new List<Object>();

2番目に、List<?>を返すメソッドがあります。それをList<Object>に変換するにはどうすればよいですか。単純にキャストできますか?

ありがとうございました!

17
Chris

なぜこれができないのですか:

List<Object> object = new List<Object>();

List はインターフェイスであり、インターフェイスをインスタンス化できないため、これを行うことはできません。 (具体的な)クラスのみが可能です。 Listを実装する具体的なクラスの例には、 ArrayListLinkedList などが含まれます。

ArrayListのインスタンスを作成する方法は次のとおりです。

List<Object> object = new ArrayList<Object>();

List<?>を返すメソッドがありますが、それをList<Object>に変換するにはどうすればよいですか

関連するコードを見せてください。答えを更新します。

38
NPE
List<Object> object = new List<Object>();

Listはインターフェイスであり、インターフェイスまたは他のWordではインスタンス化できないオブジェクトを作成できないため、これを行うことはできませんインタフェース。さらに、Listを実装するクラスのオブジェクトをその参照変数に割り当てることができます。たとえば、これを行うことができます:

list<Object> object = new ArrayList<Object>();

ここでArrayListListListを実装する任意のクラスを使用できます。

4
Chandra Sekhar

リストはインターフェースなので、インスタンス化することはできません。代わりにその実装のいずれかを使用します。

List<Object> object = new List<Object>();

リストについて:任意のオブジェクトをそのインスタンスの汎用パラメーターとして使用できます。

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

または

List<?> list = new ArrayList<Integer>();

List<Object>を使用している間、この宣言は型ミスマッチになるため無効です。

2
Alex Stybaev
package com.test;

import Java.util.ArrayList;
import Java.util.List;

public class TEst {

    public static void main(String[] args) {

        List<Integer> ls=new ArrayList<>();
        ls.add(1);
        ls.add(2);
        List<Integer> ls1=new ArrayList<>();
        ls1.add(3);
        ls1.add(4);
        List<List<Integer>> ls2=new ArrayList<>();
        ls2.add(ls);
        ls2.add(ls1);

        List<List<List<Integer>>> ls3=new ArrayList<>();
        ls3.add(ls2);


        m1(ls3);
    }

    private static void m1(List ls3) {
        for(Object ls4:ls3)
        {
             if(ls4 instanceof List)    
             {
                m1((List)ls4);
             }else {
                 System.out.print(ls4);
             }

        }
    }

}
0
jitendra rawat