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();

      } 

}
}

二つ目のプログラムは

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

このプログラムを実行すると、次のように出力されます

Class A called
x has been initializedsecondclass

しかし、電話しようとするとx.disp()、または

Object y=x.newInstance();
y.disp();

次に、オブジェクトが見つからないというエラーが発生します。x のオブジェクトを取得して disp() を呼び出す方法

4

1 に答える 1

1

これを行う最も便利な方法は、disp両方のクラスローダーで使用できるメソッドとのインターフェースを持つことです。Secondclass はそのインターフェイスを実装でき、クラスによって作成されたインスタンスをインターフェイスにキャストできます。これは、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);
于 2016-07-16T08:14:23.837 に答える