[英]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.