2016-07-11 5 views
0

私はJFileChooserを使用してクラスファイル(たとえば)を作成し、それをFileクラスオブジェクト(たとえばFile a)に保存しました。 今、リフレクションAPIを使用してこのFoo.classのメソッドや変数などのメタデータを読んでいます。 私の質問は、aに保存しました。ちょうどFile reference variableです。だから、どのようにファイル上の任意のAPIを使用することができます。 またはそうするための他の提案も歓迎されます。Fileクラスのインスタンスを作成するには?

答えて

1

私が理解として、まず第一に、あなたがた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(); 
} 

注オブジェクトクラスを作成するためにリフレクションを使用することができます。

+1

'URLClassLoader'に渡す' URL'は、クラスファイルではなくベースディレクトリを表す必要があります。したがって、選択したクラスのパッケージに応じて、クラスの親ディレクトリまたはその祖先の1つを使用する必要があります。 – Holger

+0

ええ、あなたのコメントによると本当に答えが更新されました –

+0

ええ..しかし、 'loadClass'メソッドは引数としてクラスのバイナリ名をとり、ファイルクラスオブジェクトではそのクラスの絶対パスしか持っていません。それにはどんな解決策がありますか? @ミタトコンク – Shubham

関連する問題