java从私有类调用public方法

时间:2014-06-17 03:38:08

标签: java methods call private public

我需要从像这样的库中的公共类调用私有构造函数:

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。

我该如何解决这个问题?

3 个答案:

答案 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 ...
}