2016-07-16 14 views
0
import java.lang.*; 
public class firstclass 
{ 
public static void main(String[] args) 
{ ClassLoader classLoader = firstclass.class.getClassLoader(); 

    System.out.println("class A is called ..."); 
     try { 
     Class x=classLoader.loadClass("secondclass"); 
     System.out.println("x has been initialized"+x); 
     //Object y=x.newInstance(); 
     //y.disp(); 
     } catch (Exception e) { 
     e.printStackTrace(); 

     } 

} 
} 

第二プログラムは<p>オブジェクトとしてのエラーが見つかりません。</p>

public class secondclass 
{ 
public void disp() 
{ 
System.out.println("Clss B is Called") 
} 
} 

私はこのプログラムを実行するとき、私は

Class A called 
x has been initializedsecondclass 

しかしx.disp()または

を呼び出そうかのように出力を得ることであるクラスローダを使用して作成したクラスからメソッドを呼び出す方法
+0

は、私はあなたがこのような場合にはOPが異なり、それにlitleビットを行う必要があるので、例では、静的メソッドを呼び出すしようとしていることに注意してください@sudoman – n247s

+0

を仕事にorederでそのための反射を必要とすると思います。その上にまともな文書がありますが、 – n247s

+0

投稿の冒頭にあなたの必要性を表現する必要があります。それははっきりしていません。 – davidxxx

答えて

1

メソッドdispを持つインターフェイスを持つ最も便利な方法は、両方のクラスローダーが利用できます。 2番目のクラスはそのインタフェースを実装することができ、クラスによって作成されたすべてのインスタンスをインタフェースにキャストできます。これは、spiで非常に便利に行うことができますhttps://docs.oracle.com/javase/tutorial/ext/basics/spi.html

あなたがリフレクションする必要がある場合は、インターフェイスを使用できません。

Class<?> type = classLoader.loadClass("secondclass"); 
    Object instance = type.getConstructor().newInstance(); 
    type.getMethod("disp").invoke(instance); 
関連する問題