簡體   English   中英

如何從使用類加載器創建的類中調用方法

[英]How to call a method from class created using classloader

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

最方便的方法是使用兩個類加載器都可以使用方法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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM