好吧,我不是一个Java菜鸟,只是在我学习更多有趣的东西,比如MySQL,Servlets,Java EE,JDBC等等时,我已经忘记了一点关于核心Java的事情。所以不要把你的答案框起来就像我是初学者一样。现在问题.....
我正在编写一个扩展JFrame的类(简称ThisIsAJFrameExtendingClass
),为了最大限度地减少与整个项目的混淆,我还希望在ThisIsAJFrameExtendingClass
中停放一些其他实用工具方法。我打算让这个类(ThisIsAJFrameExtendingClass
)从用户那里寻求某些输入;自杀(即dispose()
)。所以,我的问题是,如何在类中独立使用实用程序方法,而不会在用户屏幕上弹出任何JFrame。
我喜欢在ThisIsAJFrameExtendingClass
类中的多个构造函数的帮助下解决方案,其中,调用无参数构造函数返回JFrame,第二个构造函数使用boolean参数提供对实用程序方法的访问。
[UPDATE]
哦......我只是想了一下,实用程序方法有一个返回类型的ArrayList所以,假设实用程序方法被调用utilMethod()
那么:
ArrayList<String> pring = new ThisIsAJFrameExtendingClass().utilMethod();
上面的代码会输出任何JFrame吗?
答案 0 :(得分:1)
您可以创建实用程序方法static
,在这种情况下,可以使用ThisIsAJFrameExtendingClass.<method name>
调用它们而无需创建实例。
关于构造函数的东西对我来说并没有多大意义。类的构造函数始终返回该类的实例。由于您传入的参数,它无法返回“其他内容”。
[编辑回复问题的更新]:
new ThisIsAJFrameExtendingClass()
将创建类的实例,运行其构造函数(以及所有超类的默认构造函数)。这可以分配继承树中每个构造函数所需的其他资源(例如其他Swing组件或其他)。因此创建了一个JFrame
,但是如果你只调用utilMethod()
并且永远不会挂起对框架的引用,那么它将被垃圾收集并且在将来某个时候释放它的资源。
创建一个JFrame实例以在其上调用单个实用程序方法并不是一种特别有效的方法,但它不会导致任何问题。 (正如Chad所述,默认情况下JFrame
不可见,因此如果您在“util”模式下使用它,用户将看不到任何内容。
对于返回ArrayList
,作为使用集合时的一般规则,您应该返回有意义的最高级别接口而不是具体类。因此,在这种情况下,请考虑返回List<String>
甚至Collection<String>
。
答案 1 :(得分:1)
我在支持你的概念方面遇到了很多麻烦,这对我来说听起来有点困惑。至少,它听起来像是可怕的设计。但我确实有一些建议:
最后,您是否希望一旦用户完成JFrame消失,或者您想要终止该应用程序? dispose()
只会做前者,你的应用会继续作为一种无头僵尸程序运行。
答案 2 :(得分:0)
好的,我们假设您需要的方法不是静态的。
在这种情况下,请记住,除非你调用setVisible(true),否则JFrame不会显示;因此,请确保您永远不会显示框架,并且您可以使用您想要的任何功能,而不会让用户烦恼。
答案 3 :(得分:0)
或者您可以正确设计并将实用程序方法分解为单独的类......