曾几何时:
我有一个有很多领域的classA。我通过构造函数将类A注入到classB和类C中,因为最后两个需要与classA进行通信。
问题:
所以我已经完成了依赖注入,现在我注意到B类和C类很难过,因为它们无法访问A类中设置为private的字段。他们通过getter尝试了它,但是A类很快就变得太胖了,因此两个类都想知道是否有办法在没有getter的情况下访问他们的依赖字段而不将它们公开。
示例(伪代码!!!):
class A {
private field1 = 1;
private field2 = 2;
private field3 = 3;
private field4 = 4;
private field5 = 5;
private field6 = 6;
}
class B {
public B(A a) {
System.out.print(a.field1);
}
}
class C {
public B(A a) {
System.out.print(a.field2);
}
}
A a = new A();
new B(a);
new C(a);
继承和设置保护字段会解决问题,但问题是每个孩子都有不同的父母。我不想那样。
所以我的问题是: 如何在没有getter或反射的情况下访问依赖项的字段?
答案 0 :(得分:5)
访问私有字段的唯一方法是使用Reflection API
作为下一个:
Field field1 = A.class.getDeclaredField("field1");
// Make it accessible as it is a private field otherwise you won't be able to get the value
field1.setAccessible(true);
MyClass obj = (MyClass) field1.get(a);
然而,使用Reflection API
应该是你的最后手段,因为在这种情况下它比真正的解决方案更糟糕。