簡體   English   中英

java從私有類調用public方法

[英]java call public method from private class

我需要像這樣從庫中的公共類調用私有構造函數:

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。

我怎么解決這個問題?

XMLRoutine具有私有構造函數。 因此,您不能使用新的XMLRoutine()創建。 它可能具有用於創建新的單例對象的getInstance()方法或一些其他靜態方法(可用於創建同一類的對象)

構造函數是私有的。 因此,您無法使用new XMLRoutine()正常實例化它。

如果它具有公共靜態getInstance()方法,則可以改用該方法實例化該類。

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

您需要考慮到構造函數私有的原因。 這很可能是因為您不應該直接實例化該類。

如果您確實需要實例化它,而又沒有其他處理方法,則可以隨時恢復反射(同樣,請首先窮盡所有其他選項)。

嘗試以下方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM