[英]How to reload a loaded class with different ClassLoader in Java?
[英]How to declare an object created by a class loaded by classloader
我必须使用类加载器从自定义 jar 文件中加载 class ,并且以下工作:
Class<?> JasperPrint = urlClassLoader.loadClass("net.sf.jasperreports.engine.JasperPrint");
如何声明使用构造函数创建的 object? 下面,Eclipse 抱怨 JasperPrint 不是 object:
JasperPrint jp = JasperPrint.getConstructor().newInstance();
也只是在没有实例化的情况下声明一个 object,因为以下也不起作用:
JasperPrint jp;
您的 JasperPrint 不是 class。 它是一个变量,保存加载的 Class 定义 net.sf.jasperreports.engine.JasperPrint。 在 Class 实例上,您可以调用 newInstance() 以使用无参数构造函数创建新实例:
Class<?> jasperPrintClazz = urlClassLoader.loadClass("net.sf.jasperreports.engine.JasperPrint");
Object jasperPrint = jasperPrintClazz.newInstance();
变量 jasperPrint 是 JasperPrint 类型的实例(对象)。
如果您正在动态加载 class,您不知道它是 static 类型(在编译类型时)。 如果在编译代码时将它放在类路径中,则可以将其转换为JasperPrint
的接口。 否则,您将需要使用反射来调用新创建的对象的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.