2

我在 A 类中有一个函数,我想更改 B 类中字段的值。

C 类拥有我main()并创建了 B 类和 A 类的新实例。A 类来自 API,它们的函数之一是侦听器函数。我希望该侦听器函数能够更改 B 类的字段,但是当我为侦听器函数编写代码时,它无法识别 B 类的实例。

我如何引用该实例?

示例代码:

public class A {
     public void listenermethod(){
            //can't reference Binstance <-------
     }
}

public class B {
     B.field = 1;
}

public class C {
     A Ainstance = new A();
     B Binstance = new B(); 
}
4

3 回答 3

2

您应该给 A 类一个私有 B 字段,然后您可以根据需要在该字段上调用 ​​B 的公共方法。如果您需要在单独的类 (C) 中创建 A 和 B 实例,您应该为 A 类提供一个public void setB(B b)setter 方法。

爪哇

class A {
  private B b;

  public void setB(B b) {
    this.b = b;
  }

  public void listenerMethod() {
    if (b != null) {
      b.someBMethod();
    }
  }
}

C.java

public class C {

  public static void main(String[] args) {
    A a = new A();
    B b = new B();
    a.setB(b);

    a.listenerMethod();

  }
}
于 2013-04-29T22:13:24.753 回答
0

您必须能够同时修改 C 类和 A 类。将 A 类方法重写为

public void listenermethod(Binstance theB){
            theB.something = "some_value";
     }

现在当你调用 A 类时,传入 Binstance。如果你不能修改A类,那么你的任务就无法完成。

于 2013-04-29T22:12:47.500 回答
0

根据定义,一个实例属于一个对象。因此,您的 A 类必须具有 B 类的对象作为成员:

Class A{

     private B instance_of_b;

}

现在您可以像这样访问 B 成员:

instance_of_b.member

或者属于 B 类的字段可以是静态的,然后 A 可以通过该类访问它。

B.member

还要确保您知道访问器关键字(private、protected、[friendly]、public)的含义。

于 2013-04-29T22:42:20.097 回答