gpt4 book ai didi

java - 如何从使用类加载器创建的类中调用方法

转载 作者:行者123 更新时间:2023-12-01 09:41:37 24 4
gpt4 key购买 nike

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

最佳答案

最方便的方法是拥有一个接口(interface),该接口(interface)的方法 disp 可供两个类加载器使用。 Secondclass 可以实现该接口(interface),并且您可以将该类创建的任何实例强制转换为该接口(interface)。这可以通过 spi 非常方便地完成 https://docs.oracle.com/javase/tutorial/ext/basics/spi.html

如果您无法使用接口(interface),则需要反射。

    Class<?> type = classLoader.loadClass("secondclass");
Object instance = type.getConstructor().newInstance();
type.getMethod("disp").invoke(instance);

关于java - 如何从使用类加载器创建的类中调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38408885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com