问题是我有两节课。第一个类有一个方法,它创建了第二个类的对象。是否有可能在没有return语句的情况下获取该对象?而且还没有成为一个领域
示例:
//第一堂课
public class First {
public First() {
}
public void aMethod(Object o) {
Second s = new Second(o);
}
}
//第二课
public class Second {
public Second() {
}
}
通过单击按钮调用该方法。
编辑: 对不起困惑。但我不想更改代码的原因是因为我正在进行JUnit测试。
这两个类实际上是jFrames,我正在尝试测试按钮。 在第一个类中,通过按钮调用该方法。在该方法中,它创建第二个Jframe。在这个Jframe中我还想测试一个按钮,这就是为什么我需要实例化的jFrame对象。 在aMethod()中我也传递了一些参数,这是第二个JFrame需要的。所以我不能单独测试它。
答案 0 :(得分:1)
这完全取决于您的第一个对象/需要的线程安全性。
您可以设置一个实例变量,然后公开一个getter,但也许您正在尝试在其他一些约束中工作,因为这似乎是一个非常奇怪的替代方法,只返回值。
public class First {
private Second s;
public First() {
}
public void aMethod() {
s = new Second();
}
public Second getSecond(){
return s;
}
}
编辑:另一个答案,因为我错过了无字段约束。
您可以使用Observable模式,以便您将客户端Object注册为First的侦听器,然后您可以执行;
Second s = new Second();
setChanged();
notifyObservers(s);
http://docs.oracle.com/javase/6/docs/api/java/util/Observable.html
这看起来似乎有些过分,也许您可以提供更多关于无法编辑方法签名或使用字段的原因。
答案 1 :(得分:1)
我有两种可能的想法:
1)在aMethod()
中添加参数,例如List list (or other types has Second Field)
,然后您可以list.add(new Second())
调用者从列表中获取它(最后一个元素)
2)另一个类(如果有),有一个静态字段private static Second second
,你必须编写setter / getter,也要关心线程安全问题......然后你可以在{{1}在实践中,aMethod()
真的糟糕。
最后,我会问,你真的需要这样做吗?
答案 2 :(得分:0)
您也可以在传递给方法调用的parmeter内返回它。 类似的东西:
public void aMethod(Result result) {
s = new Second();
result.val = s;
}
其中Result可能是具有Second类型成员的类。 或者也许是一般类:
Result<Second>
但我不确定这会比简单回归更好。
答案 3 :(得分:0)
最常见的是使用所谓的工厂模式
public class First {
public First() {
}
public Second aMethod(Object o) {
return new Second(o);
}
}