如何获取在void方法中实例化的对象?

时间:2013-03-14 15:08:21

标签: java variables methods

问题是我有两节课。第一个类有一个方法,它创建了第二个类的对象。是否有可能在没有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需要的。所以我不能单独测试它。

4 个答案:

答案 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);
}

}