Tworzenie obiektów + Reflection

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?

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.

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?

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.

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