我需要从像这样的库中的公共类调用私有构造函数:
public class XMLRoutine {
private static XMLRoutine _instance;
private XMLRoutine() {
}
public String signXml(String xml, PrivateKey privateKey, Certificate cert, String encoding) throws ParserConfigurationException, SAXException, IOException, PrivilegedActionException {
}
}
当我尝试这样称呼它时:
import kz.softkey.iola.applet.XMLRoutine;
...
XMLRoutine xmlr = new XMLRoutine();
我收到错误:XMLRoutine() has private access in XMLRoutine
,所以我无法调用方法signXml。
我该如何解决这个问题?
答案 0 :(得分:5)
XMLRoutine有私有构造函数。因此,您无法使用新的XMLRoutine()创建。它可能有getInstance()方法来创建新的单例对象或一些其他静态方法,你可以使用它们而不是创建同一个类的对象
答案 1 :(得分:0)
构造函数是私有的。因此,您无法使用new XMLRoutine()
以正常方式实例化它。
如果它具有public static getInstance()方法,那么您可以使用该方法来实例化该类。
XMLRoutine xmlRoutine = XMLRoutine.getInstance();
String res = xmlRoutine.anyPublicMethod();
答案 2 :(得分:0)
您需要考虑构造函数是私有的原因。这很可能是因为你不应该直接实例化这个类。
如果您迫切需要实例化它,并且没有其他办法,您可以随时恢复反射(再次,首先耗尽所有其他选项)。
尝试以下方面的内容:
try {
Class<?> cls = XMLRoutine.class;
Constructor<XMLRoutine> constructor = cls.getDeclaredConstructor();
constructor.setAccessible(true);
XMLRoutine xmlRouting = constructor.newInstance();
} catch (Exception e) { // Change to specific exception types being thrown from reflection
// handle error ...
}