actionPerformed()
我在课堂上的一个方法中有一个计算A
。结果是两个包含双精度C[]
和D[]
. 我怎样才能将它发送到另一个班级B
?
问问题
118 次
4 回答
1
有多种方法可以实现这一目标。
重要的部分是:
- 有参考
B
- 有某种方式
B
来接收您要发送的值。我会推荐某种setter方法
你也可以使用一个通用的模型,它本质上是相同的,但暴露的更少B
,使对它做淘气的事情A
变得更加困难,这可能不应该;)A
B
于 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
。一些示例方法是:
- 每个
A
get 都是对B
' 实例的引用,作为其构造函数或另一个“设置”方法的参数,然后将其存储为为此目的而制作的字段。 a1
并b1
共享一个共同的 class 实例C
。c
可以是两者的“父级”a1
和b1
(即包含两者),也可以是管理程序中某个进程的某个“管理器”组件。static
\singleton
方式。B
类存储它自己的一个静态实例,它允许从程序中的任何地方引用它。
2. 想要的通讯接口是什么
一个类向其他类公开的接口应该经过精心设计,以实现许多重要概念,例如:代码的可读性、安全性和“隐藏”、可靠性等。这也取决于两者A
是否B
存储在同一个包中或内部彼此的类,甚至彼此继承。
一些标准的沟通方式是:
- 直接写入访问:一个字段
B
被public
暴露并允许直接写入。这主要是一种不良行为(经验法则是所有字段至少应该是protected
if notprivate
)。 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 回答