0

问题是我有2节课。第一类有一个创建第二类对象的方法。是否可以在没有返回语句的情况下获取该对象?也不让它成为一个领域

例子:

//第一类

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

4 回答 4

1

我能想到的有两种可能:

aMethod()1)例如添加参数List list (or other types has Second Field),然后list.add(new Second())调用者可以从列表中获取它(最后一个元素)

2)另一个类(如果有的话),有一个静态字段private static Second second,你必须编写setter/getter,还要关心线程安全问题......那么你可以在实践中aMethod() Foo.setSecond(new Second());非常糟糕

最后,我会问,你真的需要这样做吗?

于 2013-03-14T15:18:24.093 回答
1

这完全取决于您的 First 对象是/需要的线程安全程度。

您可以设置一个实例变量,然后公开一个 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

同样,这似乎有点矫枉过正,也许您可​​以提供更多关于您无法编辑方法签名或使用字段的原因的上下文。

于 2013-03-14T15:12:21.453 回答
0

您也可以在传递给方法调用的参数中返回它。就像是:

    public void aMethod(Result result) {
             s = new Second();
             result.val = s;
        }

其中 Result 可能是具有 Second 类型成员的类。或者也许是一个通用类:

Result<Second>

但我不确定这会比简单的回报更好。

于 2013-03-14T15:16:56.550 回答
0

最常见的是使用所谓的工厂模式

public class First {

public First() {
}

public Second aMethod(Object o) {
    return new Second(o);
}

}

于 2018-01-28T16:41:13.950 回答