2017-04-12 2 views
-1
import java.util.*; 
public class Main { 
    public static void main(String[] args) { 

    List list1 = new ArrayList(); 
     list1.add(1); 
     list1.add(2); 
     list1.add(3); 

     Class myClass = list1.getClass(); 
     Object list2 = myClass.newInstance(); //I want to create the same object like list1 

     System.out.println(list1.getClass()); //result: class java.util.ArrayList 
     System.out.println(list2.getClass()); //result: class java.util.ArrayList 

} 
} 

list2オブジェクトにいくつかの要素を追加するにはどうすればよいのですか? list1オブジェクトと同様にします。例:list2.add(4);newInstance()メソッドから取得したArrayListのオブジェクトに新しい要素を追加するにはどうすればよいですか?

+1

を行うことができますか? –

+0

キャストして追加します。例 - >((list)list2).add(4) – RajatJ

+0

私はJavaを勉強しているので、私はそのようなタスクを持っています。たとえば、私はオブジェクトのクラスを知らなかったので、未知のクラスの新しいオブジェクトを作成する必要があります。私は自分の仕事をより簡潔に質問 – OFUSs

答えて

0

あなたはListにキャスト:

List list2 = (List)myClass.newInstance(); 

を...そして、通常のようにそれを使用。

特定のメソッドを使用するには、それらのメソッドを持つ型の参照が必要です。 Listは、例えば、様々なListメソッドを有する。 ArrayList固有のメソッド(ensureCapacityなど)を使用する必要がある場合は、上記のListの代わりにArrayListを使用する必要があります。

キャストに使用するクラスがわかりませんが、合理的なクラスがあれば、list2 instanceof xまたはlist2.getClass() == x.getClass()を使用して、それを使用することができます。あなたはオブジェクトが何であるかを知っているが、あなたはそれを呼び出す必要がメソッドのシグネチャを知らないと


、あなたはリフレクション(java.reflect)を使用すると思います。例えば、我々はそう、addはタイプObjectの一つのパラメータを受け入れることを知っている:

Object list2 = myClass.newInstance(); 
String methodName = "add"; 
Class[] paramTypes = {Object.class}; 
Method method = list2.getClass().getMethod(methodName, paramTypes); 
method.invoke(list2, new Object[] { 4 }); 

あなたがオブジェクトに関する何かを知っている必要があります。つまり、さまざまなメソッド(Classを参照)があるかどうかを尋ねることができ、そのパラメータタイプを取得できますが、それが何であるかわからない場合は、意味的に呼び出すことはできません。

+0

しかし、コンパイルの瞬間の前に私の新しいオブジェクトのクラスがわからない場合 – OFUSs

+0

それができるオブジェクトのリストを知っているなら、if-elseの場合はinstanceofでチェックし、キャストを入力してオブジェクトを使用してください。 –

+0

@OFUSs:私はリフレクションについてのメモを追加しました。 –

0

あなたがそこに `newInstance`を使用したいと思うなぜあなたは、以下のように

List<Integer> list1 = new ArrayList<Integer>(); 
    list1.add(1); 
    list1.add(2); 
    list1.add(3); 

    Class myClass = list1.getClass(); 
    Object list2 = myClass.newInstance(); //I want to create the same object like list1 

    Method m = myClass.getDeclaredMethod("add", new Class[] {Object.class}); 
    m.invoke(list2, 4); 

    for(int i : (List<Integer>)list2) { 
     System.out.println(i); 
    } 
関連する問題