Mechanizm refleksji - wywołanie konstruktora niedomyślnego

0

Stworzenie instancji obiektu jest proste:

 
Class class = Class.forName(className);
Object newObject = class.newInstance();

Ale w jaki sposób, wykorzystując mechanizm refleksji, stworzyć nową instancje obiektu, przy wywołaniu konstruktora niedomyślnego ?

0

java.lang.reflect.Constructor<T>.newInstance(Object... args)

0

Dla przykładu, jak powinno wywołać się konstruktor kolekcji ArrayList (new ArrayList(3) ) przy pomocy refleksji ?

Próbowałem w poniższy sposób, niestety nieskutecznie...

Class class = Class.forName("java.util.ArrayList");
final Class[] PARAMS = new Class[]{Integer.class};
constructor = class.getDeclaredConstructor(PARAMS);
list = (List)constructor.newInstance(new Object[]{3});
0

Musisz zastosować int.class, a nie Integer.class:

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

public class Main {

    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, 
            InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        Class klasa = Class.forName("java.util.ArrayList");
        final Class[] params = new Class[]{int.class};
        Constructor constructor = klasa.getDeclaredConstructor(params);
        List list = (List) constructor.newInstance(new Object[]{3});
        list.add(5);
        list.add("kupa");
        System.out.println(list);
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1