繁体   English   中英

如何声明由类加载器加载的 class 创建的 object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM