2016-03-19 10 views
2

リフレクションされたクラスのインスタンスを取得したいと思います。私に説明してみましょう: Javaでリフレクトされたクラスのインスタンスを取得する

// Before this, class loading and stuff that are not transcendental for this situation. 
Method executeApp = loadedClass.getMethod("execute", Main.class) 
executeApp.invoke(loadedClassInstance, MAIN); // This "MAIN" is an instance of "Main" class 

、別のプログラムから

( 'B' プログラム):の

public class b { 
    public void execute(net.package.Main instance) { 
    System.out.println(instance.getUserInput()); // Just an example, the point is to get information from the instance 
    } 
} 

より良い例
は、私が 'A' のプログラムに反映する方法の新しいインスタンスを作成します私がしようとしていることは次のとおりです:http://pastebin.com/61ZR9U0C
私は 'B'プログラムがnet.package.Mainであることを理解するようにするつもりはありません。
何がいいですか?多分それは不可能です...

+0

が見えています。 'Main'はあなたが呼び出すpublicメソッド' getUserInput() 'を持つ型でなければなりません。 – markspace

+0

はい、getUserInput()で意味したことは、 'A'プログラムと同じインスタンスにする必要があるメソッドです。例はJTextFieldからテキストを抽出するメソッドになります –

+0

私は100ではありませんあなたが言っていることは確かですが、リフレクションを使用してメソッドを呼び出す場合は、インスタンスとメソッド、およびメソッドのパラメータを持つ必要があります。したがって、 'b.execute()'には少なくとも2つの引数が必要です。 – markspace

答えて

1

は、すべてのクラス が

パッケージオブジェクト拡張するので、あなたは、パッケージ名で苦労しませんB.executeでパラメータがObject型 でもしましょう:

import stackoverflow.somepackage.B; 
class Main{ 

     public String getUserInput(){ 
      return "I 'am user foo"; 
     } 

} 

class A{ 

    public void callB() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException { 
     Class loadedClass = B.class; 
     Method executeApp = loadedClass.getMethod("execute", Object.class); 
     executeApp.invoke(loadedClass.newInstance(),Main.class.newInstance()); 
    } 

} 
をStackOverflowの

パッケージ:stackoverflow.somepackage

class B{ 

    public void execute(Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { 
     Class mainClass = object.getClass(); 

     // for your purpose 
     // Method method = mainClass.getMethod("setLabelText", String.class); 
     // String text = "Some Text"; 
     // method.invoke(object, text); 

     // for demonstration 
     Method method = mainClass.getMethod("getUserInput"); 
     System.out.println(method.invoke(object)); 
    } 

} 

パッケージ:stackoverflowの

public class ReflectionTest { 

    @Test 
    public void callB() throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { 
     A myA = new A(); 
     myA.callB(); 
    } 


} 

私はあなただけで多型を求めているように、ユーザfooの

+0

問題は 'A'クラスと 'B'クラスが別々のファイルにあることです。私が@markspaceに返答したpastebinを見てください。 –

+0

AとBは異なるパッケージに入っています – jam

+0

はい、そうです。それが問題だ。 –

関連する問題