Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何引用在另一个类中创建的实例_Java - Fatal编程技术网

Java 如何引用在另一个类中创建的实例

Java 如何引用在另一个类中创建的实例,java,Java,我在类a中有一个函数,我想更改类B中某个字段的值 类C有mymain(),并创建类B和类a的新实例。类a来自API,它们的函数之一是侦听器函数。我希望该侦听器函数能够更改类B的字段,但当我为侦听器函数编写代码时,它无法识别类B的实例 如何引用该实例 示例代码: public class A { public void listenermethod(){ //can't reference Binstance <------- } } publi

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

类C有my
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(); 
}
公共A类{
公共void listenermethod(){

//无法引用BinInstance您必须能够修改类C和类A。将类A方法重写为

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

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

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

A.java

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();

  }
}

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

Class A{

     private B instance_of_b;

}
现在您可以通过以下方式访问B成员:

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

B.member

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

是的,它是对实例b的引用。@Tanner is
if(b!=null)
考虑到他在C类中设置了它,甚至是必要的吗?@Chowza这是一个很好的做法,因为你永远不能确定
b
不是空的。@Chowza:如果你通过A的构造函数传入b,并确保A没有默认构造函数,即在b实例中没有传递的构造函数,那么空检查可能就没有必要了。