私が理解として、まず第一に、あなたがたURLClassLoader経由 は、[ファイルクラスファイルと文字列クラス名を(もファイル名とまったく同じクラス名を、それを把握することができます)
持っていると仮定しましょうということ行うことができますClassオブジェクトにクラスファイルを変換する必要があります
try {
URLClassLoader classLoader = new URLClassLoader(new URL[]{parent_directory});
Class<?> clazz = classLoader.loadClass(className);
} catch (Exception e) {
// something went wrong..
e.printStackTrace();
}
は、今、あなたは、クラスオブジェクトを持っていて、メソッド名を使用すると、特定の方法を作成する必要が不明であることを
try {
Object instance = clazz.newInstance(); // if there no default constructor you need to get constructors list and create a object
Method method = clazz.getDeclaredMethod(methodName, String.class);
method.setAccessible(true);
method.invoke(instance, argument);
} catch (Exception e) {
// something went wrong..
e.printStackTrace();
}
注オブジェクトクラスを作成するためにリフレクションを使用することができます。
'URLClassLoader'に渡す' URL'は、クラスファイルではなくベースディレクトリを表す必要があります。したがって、選択したクラスのパッケージに応じて、クラスの親ディレクトリまたはその祖先の1つを使用する必要があります。 – Holger
ええ、あなたのコメントによると本当に答えが更新されました –
ええ..しかし、 'loadClass'メソッドは引数としてクラスのバイナリ名をとり、ファイルクラスオブジェクトではそのクラスの絶対パスしか持っていません。それにはどんな解決策がありますか? @ミタトコンク – Shubham