【问题标题】:java call public method from private classjava从私有类调用公共方法
【发布时间】:2014-08-06 23:09:56
【问题描述】:

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

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。

我该如何解决这个问题?

【问题讨论】:

  • 私教课在哪里?
  • 具有私有访问权限的公共类

标签: java methods call private public


【解决方案1】:

XMLRoutine 有私有构造函数。所以你不能使用 new XMLRoutine() 创建。它可能具有用于创建新单例对象的 getInstance() 方法或其他一些您可以使用的静态方法,而不是创建同一类的对象

【讨论】:

  • 是的,它有 getInstance() 方法。所以我必须创建Object xmlr = XMLRoutine.getInstance() 然后?我不知道这之后该怎么办。请帮忙。
  • XMLRoutine xmlr = XMLRoutine.getInstance();它会为你创建一个单例对象。然后尝试 xmlr.signXml(.....) 与 args 你可以继续你的代码
【解决方案2】:

构造函数是私有的。所以你不能用new XMLRoutine() 以正常方式实例化它。

如果它具有公共静态 getInstance() 方法,那么您可以使用该方法来实例化该类。

XMLRoutine xmlRoutine = XMLRoutine.getInstance();
String res = xmlRoutine.anyPublicMethod();

【讨论】:

  • 你想说的是`XMLRoutine.class.newInstance();. And that is equivalent to new XMLRoutine()`。所以它也不起作用..!!
  • 你来晚了,其他答案(及其 cmets)中包含完全相同的内容
  • @Dileep 不,根本不是这么说的。 .class 是从哪里来的,工厂方法!= 构造函数。
  • @Iwan Satria 您不能将静态函数的返回值分配给非静态对象..!!将其更改为 static XMLRoutine xmlRoutine
【解决方案3】:

您需要考虑构造函数是私有的是有原因的。这很可能是因为您不应该直接实例化该类。

如果您确实需要实例化它,并且没有其他方法可以做事,您可以随时恢复到反射(同样,先用尽所有其他选项)。

尝试以下方式:

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

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2013-08-03
    • 2011-02-11
    • 2011-07-21
    相关资源
    最近更新 更多