0
AspectJ에서 비공개 클래스의 객체를 인스턴스화하려고합니다.AspectJ - 공개 클래스가 아닌 객체를 반성하기 위해 리플렉션을 사용합니다.
The constructor Bill(int, String, String) is not visible
:
Bill b = new Bill(currInvoice, idOperator, idClient);
문제는 내가 오류가 발생한다는 것입니다 : 내가 할 수 있기를 원 측면 클래스에서
package ca1.business;
public class Bill {
int id;
String idOperator;
String idClient;
Bill(int id, String idOperator, String idClient) { /* (...) */ }
public String toString() { /* (...) */ }
public boolean equals(Object o) { /* (...) */ }
public int getId() { /* (...) */ }
public String getOperator() { /* (...) */ }
public String getClient() { /* (...) */ }
}
:
나는이 클래스가
그래서 조사를하고 this 게시물에 설명 된 것처럼 반사를 사용하려고했습니다.
try {
Constructor<Bill> cons = Bill.class.getDeclaredConstructor(null);
cons.setAccessible(true);
Bill invoice = cons.newInstance(null);
invoice.id = 1;
invoice.idOperator = "foo";
invoice.idClient = "bar";
// etc...
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
하지만 라인에 오류 얻을 :
invoice.id = 1;
invoice.idOperator = "foo";
invoice.idClient = "bar";
오류가이다 :
The field Bill.X is not visible.
어떤 해결 방법이있는 경우
사람이 알고 있나요?
로 보호 된 패키지에 넣어 팩토리 클래스하시기 바랍니다 ** 귀하의 aspectj 소스를 포함하는 [mcve]를 제공하십시오. – GhostCat
클래스 빌에서는 패키지 전용 생성자가 있습니다. 다른 패키지에서 볼 수 없으므로 public으로 만들고 Bill을 호출하십시오. b = new Bill (currInvoice, idOperator, idClient); 반사없이. – DontPanic