如何从通过类加载器加载的类中调用构造函数

huangapple go评论66阅读模式
英文:

How to call constructor from class loaded via classloader

问题

我使用类加载器从一个JAR文件中加载一个类,但是当尝试调用存在的默认构造函数时,我收到一个"NoSuchMethodException"异常。

问题可能是加载的类实际上是java.lang.Class类?

我该如何调用构造函数?

Class<?> JRXlsExporter = urlClassLoader.loadClass("net.sf.jasperreports.engine.export.JRXlsExporter");
String classname = JRXlsExporter.getName(); // 看起来没问题... 它是net.sf.jasperreports.engine.export.JRXlsExporter
Class myclass = JRXlsExporter.getClass(); // 这可能是问题,这个类是java.lang.Class
Constructor constructor = myclass.getConstructor(); // 抛出 java.lang.NoSuchMethodException: java.lang.Class.<init>()
英文:

I use classloader to load a class from a jar, but I get a "NoSuchMethodException" exception when trying to call the default constructor, which does exist.

The problem may to be that the loaded class is simply java.lang.Class?

How can I call the constructor?

Class&lt;?&gt; JRXlsExporter = urlClassLoader.loadClass(&quot;net.sf.jasperreports.engine.export.JRXlsExporter&quot;);
String classname = JRXlsExporter.getName();     //   looks good... it&#39;s net.sf.jasperreports.engine.export.JRXlsExporter
Class myclass = JRXlsExporter.getClass();           // this might be a a problem, the class is java.lang.Class
Constructor constructor = myclass.getConstructor();        // throws  java.lang.NoSuchMethodException: java.lang.Class.&lt;init&gt;()

答案1

得分: 0

你的 JRXlsExporter 是一个 Class - 你可以在它上面调用 getConstructor

Constructor constructor = JRXlsExporter.getConstructor();
英文:

Your JRXlsExporter is a Class - you can call getConstructor on it:

Constructor constructor = JRXlsExporter.getConstructor();

huangapple
  • 本文由 发表于 2020年8月8日 20:05:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/63315161.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定