3

我在java中创建了一个类的实例,如下所示:

ABC ab = new ABC();

我想ab在另一个类中访问这个瞬间XYZ。如何使这个对象在 XYZ 类中可用?

4

6 回答 6

8

如果没有关于您的问题的更具体信息,很难回答您的问题,但这肯定会奏效:

如果您想在该类的任何地方使用它,您可以使用 setter 来初始化其他类中的实例变量:

class someClass {
   void someMethod() {
      ABC ab = new ABC();
      XYZ xyz = new XYZ();
      xyz.setABC(ab);
   }
}

class XYZ {
   ABC ab;
   //...
   void setABC(ABC ab) {
     this.ab = ab;
   }
   //...
   void doSomething() {
      // do something with instance variable ab
   } 
}
于 2012-08-21T04:07:01.307 回答
5

有几种方法可以实现您想要实现的目标。其中一些可能如下:

通过constructor
此处传递对象引用,当您创建实际类的对象时,您将显式传递引用类的引用。

public class ActualClass{
    private ReferenceClass refClassObject;
    
    /**
    * Passing through a constructor
    */
    public ActualClass(ReferenceClass refClassObject){
        this.refClassObject = refClassObject;
    }
}

class ReferenceClass{
    /**
    * Your implementation of the class
    */
}

使用 getter/setter 方法
在这种方法中,您将通过显式public setXX()方法传递对象的引用。这种方法更灵活,因为您可以随时更新引用对象(想想polymorphism)。举个例子:

public class ActualClass{
    private ReferenceClass refClassObject;
    
    public ActualClass(){
    }
    
    public void setReferenceClass(ReferenceClass refClassObject){
        this.refClassObject = refClassObject;
    }
    
    public ReferenceClass getReferenceClass(){
        return refClassObject;
    }
}

class ReferenceClass{
    /**
    * Your implementation of the class
    */
}

使用构造函数和 getter/setter 的组合
为了增加灵活性,您可能希望使用引用初始化 Actual 类对象。但是,如果您还想保留在稍后阶段更改对象引用的选项,请选择我上面指定的 #1 和 #2 的组合。

public class ActualClass{
    private ReferenceClass refClassObject;
    
    public ActualClass(){
    }
    
    public ActualClass(ReferenceClass refClassObject){
        this.refClassObject = refClassObject;
    }
    
    public void setReferenceClass(ReferenceClass refClassObject){
        this.refClassObject = refClassObject;
    }
    
    public ReferenceClass getReferenceClass(){
        return refClassObject;
    }
}

class ReferenceClass{
    /**
    * Your implementation of the class
    */
}

你应该选择哪一个?那么这将取决于您的实施和要求。

于 2012-08-21T04:40:04.590 回答
2

这个答案与 Doug Ramsey 完全相同, 我试图用相同的逻辑来解释这个链接。

  public class A {
        public void m1() {
            System.out.println("inside m1 method");
            ABC ab = new ABC(); // 2 object is made and reference is given to ab 
            XYZ xyz = new XYZ();  3 object is made and reference is given to xyz 
            xyz.send(ab); // 4 THIS IS WHAT YOUR QUESTION MEANS
        }
    }


    class XYZ {
       ABC ab;
       //...
       void send(ABC ab) { // 5
         this.ab = ab;
         System.out.println("inside send");
         callme(); 
       }
       //...
       void callme() { // 6
           System.out.println("A is : "+ab.a);
           System.out.println("b is : "+ab.b);
          // do something with instance variable ab
       } 
    }

public class ABC {
    int a = 10;
    static int b= 20;
    public static void main(String[] args) // called first
    {
        A a = new A();
        a.m1();
    }
}
于 2012-08-21T04:39:30.567 回答
0

您有两种方法可以将对象参数传递给一个类到另一个类。

  • 将参数传递给方法

    public void passMethod(ABC ab) {
    }
    
  • 将参数传递给构造函数

    public class XYZ {
    
        public XYZ(ABC ab) {               
        }
    }
    
于 2012-08-21T05:01:58.763 回答
0

我知道这个问题很老,但如果我是正确的,你想将一个对象转移到另一个要使用的类中。

为了做到这一点,你需要一些东西

XYZ 类必须有一个构造函数来接收参数“Object”,它类似于

class XYZ{
    private Object ab
    public XYZ(Object ab){
        this.ab = ab;//This is the constructor called when you create an XYZ object, and want to use the Object ab in XYZ
    }
于 2013-10-05T23:04:24.137 回答
0
package demo;

class ABC{
     void disp(xyz arg1){
        System.out.println("runing disp method in pratics");
        System.out.println("x value:"+arg1.x);
        arg1.test();
     }

}

class xyz{
     int x = 67;
     void test(){
        System.out.println("runing test method in pratics");
     }
}

class pratics {

    public static void main(String[] args) {
        ABC ab=new ABC();
        ab.disp(new xyz());
    }

}
于 2014-11-23T18:09:51.277 回答