0

actionPerformed()我在课堂上的一个方法中有一个计算A。结果是两个包含双精度C[]D[]. 我怎样才能将它发送到另一个班级B

4

4 回答 4

1

有多种方法可以实现这一目标。

重要的部分是:

  • 有参考B
  • 有某种方式B来接收您要发送的值。我会推荐某种setter方法

你也可以使用一个通用的模型,它本质上是相同的,但暴露的更少B,使对它做淘气的事情A变得更加困难,这可能不应该;)AB

于 2013-07-25T01:04:03.603 回答
0

尝试使两个数组 C 和 D 都是静态的。使这些静态将允许其他类访问它。否则,您应该通过参数将其传递给构造函数。

参数方法:

public class A implements ActionListener{

Array C;
Array D;

Bclass B = new Bclass(C, D);

    public void actionPerformed(){
        //Do stuff to Arrays

    }

}

public class Bclass{

    Bclass(Array C, Array D){
        //This is Constructor...
    }

}

静态方法:

public class A implements ActionListener{

public static Array C;
public static Array D;

    public void actionPerformed(){
        //Do stuff to Arrays

    }

}

public class Bclass{

    Bclass(){
        //This is Constructor...
        A.C().getIndexOf("C-stuff");
        A.D().getIndexOf("D-stuff");
    }

}
于 2013-07-25T01:20:34.997 回答
0

你有很多方法。对您来说正确的一个取决于您使用的对象模型的结构。

但是,您必须了解两个基本概念:

1.什么是“交点”。

为了让A' 实例(调用它a1)能够与B' 实例(b1)进行通信,a1必须有一种方法可以“把手”放在对 的引用上b1。一些示例方法是:

  • 每个Aget 都是对B' 实例的引用,作为其构造函数或另一个“设置”方法的参数,然后将其存储为为此目的而制作的字段。
  • a1b1共享一个共同的 class 实例Cc可以是两者的“父级”a1b1(即包含两者),也可以是管理程序中某个进程的某个“管理器”组件。
  • static\singleton方式。B类存储它自己的一个静态实例,它允许从程序中的任何地方引用它。

2. 想要的通讯接口是什么

一个类向其他类公开的接口应该经过精心设计,以实现许多重要概念,例如:代码的可读性、安全性和“隐藏”、可靠性等。这也取决于两者A是否B存储在同一个包中或内部彼此的类,甚至彼此继承。

一些标准的沟通方式是:

  • 直接写入访问:一个字段Bpublic暴露并允许直接写入。这主要是一种不良行为(经验法则是所有字段至少应该是protectedif not private)。
  • set方法:B有一个 set 方法接收计算的数据,处理它并将其存储在它的字段中(或传递它)。
  • 侦听 -A将计算的数据存储在自身中,并让所有已注册的“侦听器”通过在其中调用适当的方法来知道有新数据可用。侦听器对相关字段具有读取权限,或者数据作为参数传递,然后侦听器 ( b1) 决定如何处理数据。
于 2013-07-25T01:03:48.780 回答
0

创建 B 类的实例并将计算结果传递给该实例。

这是一个非常基本的问题,一旦您有了一些经验,就很容易解决。您可能会发现有关面向对象编程的 wiki很有用。一旦你了解它,它的强大功能。

这里有一些例子给你...

public class ClassB{
    double multiplier;
    public ClassB(){
        //this will be called when you create an instance of class B
        //with no arguments. Also called the default constructor, or empty-arg
        //constructor.
        multiplier = 2;
    }
    public void setMultiplier(double value){
        multiplier = value;
    }
    public void calculate(double[] c, double[] d){
        //do nifty stuff, like multiply every value in c and d!
        for(int i=0;i<c.length;i++){
            c[i] *= multiplier;
            d[i] *= multiplier;
        }
    }
}

// and in your class having the action performed method...
//create an instance of class b. This will call the empty-arg constructor.
ClassB classB1 = new ClassB();
ClassB classB2 = new ClassB();
public void actionPerformed(ActionEvent e){
    double[] c1 = new double[10];
    double[] d1 = new double[10];
    double[] c2 = new double[10];
    double[] d2 = new double[10];
    //call classB1 calculate method. This will multiply c1 and d1 by 2,
    //as classb1's multiplier is 2.
    classB1.calculate(c1, d1);
    classB2.setMultiplier(4);
    //call classB2 calculate method. This will multiply c2 and d2 by 4,
    //as classb2's multipler has been set to 4.
    classB2.calculate(c2, d2);
}

这只是一个简单的例子,说明了面向对象编程可以为您做什么。还有很多东西要学,但显然你才刚刚开始,我不会让你不知所措。

于 2013-07-25T01:04:03.510 回答