私は2つの質問があります、実際に...最初に、なぜ私はこれを行うことができません:
List<Object> object = new List<Object>();
2番目に、List<?>
を返すメソッドがあります。それをList<Object>
に変換するにはどうすればよいですか。単純にキャストできますか?
ありがとうございました!
なぜこれができないのですか:
List<Object> object = new List<Object>();
List
はインターフェイスであり、インターフェイスをインスタンス化できないため、これを行うことはできません。 (具体的な)クラスのみが可能です。 List
を実装する具体的なクラスの例には、 ArrayList
、 LinkedList
などが含まれます。
ArrayList
のインスタンスを作成する方法は次のとおりです。
List<Object> object = new ArrayList<Object>();
List<?>
を返すメソッドがありますが、それをList<Object>
に変換するにはどうすればよいですか
関連するコードを見せてください。答えを更新します。
List<Object> object = new List<Object>();
Listはインターフェイスであり、インターフェイスまたは他のWordではインスタンス化できないオブジェクトを作成できないため、これを行うことはできませんインタフェース。さらに、Listを実装するクラスのオブジェクトをその参照変数に割り当てることができます。たとえば、これを行うことができます:
list<Object> object = new ArrayList<Object>();
ここでArrayListはList、Listを実装する任意のクラスを使用できます。
リストはインターフェースなので、インスタンス化することはできません。代わりにその実装のいずれかを使用します。
List<Object> object = new List<Object>();
リストについて:任意のオブジェクトをそのインスタンスの汎用パラメーターとして使用できます。
List<?> list = new ArrayList<String>();
または
List<?> list = new ArrayList<Integer>();
List<Object>
を使用している間、この宣言は型ミスマッチになるため無効です。
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);
}
}
}
}