Tworzenie obiektów + Reflection

Odpowiedz Nowy wątek
2009-09-15 00:27
0

Mam taką klasę:

package test;

public class Foo {
    public Foo(String val) {
        System.out.println(val);
    }
}

W taki sposób używając Reflection mogę stworzyć nową instancję danej klasy:

package test;

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

public class Program {

    public static void main(String args[]) {
        try {
            Class<?> foo = Class.forName("test.Foo");
            Constructor<?> constructor = foo.getConstructor(new Class[]{String.class});
            constructor.newInstance(new Object[] {"Ala ma kota!"});
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

Wszystko działa ponieważ, klasa Foo i Program znajdują się w jednym pakiecie. Co należy zrobić aby utworzyć instancję klasy, która jest w innym pliku *.jar?


Pozostało 580 znaków

2009-09-15 10:15
0

Musisz tylko zapewnić, że jar znajduje się w classpathie. Jak tego nie będzie to poleci ClassNotFoundException. Nic poza tym ponieważ podajesz nazwę klasy wraz z nazwą pakietu.

Pozostało 580 znaków

2009-09-16 09:08
0

Dzięki za odpowiedź. Co zrobić jednak w takim przypadku, gdy to mój jar, który tworzy obiekty na podstawie nazwy, jest dołączony do innego projektu? I to w tym projekcie chciałbym wykorzystać tą funkcjonalność ładowania obiektów?


Pozostało 580 znaków

2009-09-16 20:46
0

Nie ma znaczenia co jest do czego podłączane.

Jeżeli używasz Class.forName i gdziekolwiek w classpath jest odpowiednia klasa to JVM daje pewność, że klasa ta zostanie znaleziona i załadowana przed użyciem.


Registered Linux user #456405 | SCJP 6 | SCWCD 5 | SCBCD 5

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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