在没有getter或反射的情况下访问依赖字段

时间:2016-10-01 14:26:36

标签: java

曾几何时:

我有一个有很多领域的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或反射的情况下访问依赖项的字段?

1 个答案:

答案 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应该是你的最后手段,因为在这种情况下它比真正的解决方案更糟糕。