0

好吧,我不是 Java 菜鸟,碰巧我在学习 MySQL、Servlets、Java EE、JDBC 等更有趣的东西时忘记了一点关于核心 Java 的知识;所以不要把你的答案当成一个初学者。现在的问题......

我正在编写一个扩展 JFrame 的类(比如说ThisIsAJFrameExtendingClass),为了尽量减少与我的整个项目的混淆,我还想在ThisIsAJFrameExtendingClass. 我打算这个类(ThisIsAJFrameExtendingClass)从用户那里寻求某些输入;自杀(即 dispose())。所以,我的问题是,我怎样才能在类中独立使用实用程序方法,而不会在用户屏幕上弹出任何 JFrame。

我想要一个借助ThisIsAJFrameExtendingClass类中的多个构造函数的解决方案,其中调用无参数构造函数返回 JFrame,第二个带有布尔参数的构造函数可以访问实用程序方法。

[更新]

哦....我刚刚想到,实用程序方法的返回类型为 ArrayList 所以,假设调用实用程序方法utilMethod()

ArrayList<String> pring = new ThisIsAJFrameExtendingClass().utilMethod();

上面的代码会输出任何 JFrame 吗?

4

4 回答 4

1

您可以制作实用程序方法static,在这种情况下,可以使用它们来调用它们ThisIsAJFrameExtendingClass.<method name>而无需创建实例。

关于构造函数的东西对我来说真的没有意义。类的构造函数总是返回该类的一个实例。由于您传入的参数,它不能返回“其他东西”。

[编辑以回应问题的更新]:

new ThisIsAJFrameExtendingClass()将创建你的类的一个实例,运行它的构造函数(以及所有超类的默认构造函数)。这可能会分配继承树中的每个构造函数所需的其他资源(例如其他 Swing 组件或其他资源)。所以 aJFrame被创建了,但是如果你只调用utilMethod()并且从不挂起对框架的引用,它将被垃圾收集并在将来的某个时候释放它的资源。

创建一个 JFrame 实例以在其上调用单个实用程序方法并不是一种特别有效的处理方式,但它不会引起任何问题。(正如Chad所说,默认情况下 aJFrame是不可见的,因此如果您在“util”模式下使用它,用户将看不到任何内容)。

至于返回ArrayList,作为使用集合时的一般规则,您应该返回有意义的最高级别接口而不是具体类。所以在这种情况下,考虑返回List<String>甚至Collection<String>.

于 2009-12-20T12:39:51.667 回答
1

我在支持您的概念时遇到了很多麻烦,这对我来说听起来有点困惑。至少,这听起来像是可怕的设计。但我确实有一些建议:

  1. 您可以将这些实用程序方法设为静态,然后您根本不需要实例化您的类来使用它们。这将是最简单的情况。
  2. 您可以将实用程序方法打包在框架的静态内部类中,这基本上可以让您绕过每个文件只有一个类的要求。

最后,您只是希望 JFrame 在用户完成后消失,还是要终止应用程序?dispose()只会做前者,您的应用程序将继续作为一种无头僵尸进程运行。

于 2009-12-20T12:44:52.217 回答
0

好的,让我们假设您需要的方法不是静态的。

在这种情况下,请记住 JFrame 不会出现,除非您调用 setVisible(true); 所以只要确保你从不显示框架,你可以使用你想要的任何功能,而不会让用户烦恼。

于 2009-12-20T12:44:08.883 回答
0

或者您可以正确设计它并将实用程序方法分解为一个单独的类......

于 2009-12-20T13:22:44.893 回答