Java:实例真的比静态好吗?

Java:实例真的比静态好吗?,java,class,oop,object,static,Java,Class,Oop,Object,Static,所以我有一些类,比如MainWindow,MenuPanel,GamePanel,GameEngine,Player等等 我的问题是,虽然我已经读了很多关于静态vs实例的书,但是我的一句话是这样的: MainWindow.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(…) 或MainWindow.getGamePanel().getLabels()[0].getIcon() 你认为这是一个很好的实践吗?在每个对象都有不

所以我有一些类,比如
MainWindow
MenuPanel
GamePanel
GameEngine
Player
等等

我的问题是,虽然我已经读了很多关于静态vs实例的书,但是我的一句话是这样的:
MainWindow.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(…)

MainWindow.getGamePanel().getLabels()[0].getIcon()

你认为这是一个很好的实践吗?在每个对象都有不同的属性并且事物都不是一般化的情况下,尽量不使用静态,而不是声明
标签
播放器
名称
静态,并且具有更易于重用和读取的代码

我之所以使用这些长代码,是因为在
Player
(更像是逻辑类)类中创建
GamePanel
(视觉类)对象肯定会很尴尬。所以我只是在
MainWindow
中为每个类创建了一个对象(不是主类,只是JFrame类),并为每个类创建了
静态getter

MainWindow.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(...);
这是一个典型的违反,有时表示为“ask,don-look”。调用这些getter的类对程序的整体结构了解太多,这使得它很脆弱。如果这些类之间的关系发生变化,那么依赖于这些链式getter的所有代码都将中断


“ask,don't look”背后的思想是,调用这些getter以获取播放器名称的类应该要求将播放器名称作为构造函数参数。如果这导致了一个具有大量参数的构造函数,则该类可能违反了。

我很难说出您所描述的内容。。。听起来你的代码结构很奇怪<代码>主窗口.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(…)在我看来很可疑。。。看起来您仍然在使用静态引用执行所有操作,您只有一个返回特定实例的顶级静态方法。如果看不到更多的代码,很难说清楚,但我敢打赌,可以重新构造一些东西,这样你就根本不需要那些长的访问链了。
MainWindow.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(…)也可能是由于糟糕的设计,而不仅仅是使用实例。