首页 > 解决方案 > “应该以静态方式访问”

问题描述

我有一个可能不必要的繁琐名称的类,其中包含我在其他地方使用的许多静态方法。

而不是用很多东西填充我的代码

VeryUnnecessarilyLongCumbersomeName.doThingFoo();
VeryUnnecessarilyLongCumbersomeName.doThingBar();
VeryUnnecessarilyLongCumbersomeName.doThingEgg();
VeryUnnecessarilyLongCumbersomeName.doThingSpam();

我宁愿有

VeryUnnecessarilyLongCumbersomeName thing = new VeryUnnecessarilyLongCumbersomeName();
thing.doThingFoo();
thing.doThingBar();
thing.doThingEgg();
thing.doThingSpam();

但是,这会收到警告

"the static method doThingFoo() should be accessed in a static way."

我知道这里有多种解决方案。使用更好的类名。让它不是静态的。忽略它,因为它只是一个警告。

但我实际上并不认为这应该是一个警告。这样做会造成什么危害?是否有一种更优雅/正确的方法可以使我的代码不那么笨拙,而不是上述解决方案之一?

注意:我怀疑这可能保证coding-style标签,因此被认为是题外话并被拒绝。但是,我认为这里有空间提出这样的问题,所以我把它留给你们。

标签: java

解决方案


尽管它在技术上没有害处,因为它在技术上有效,但问题在于它具有误导性,并且实例thing包含的任何值实际上对于方法的结果都无关紧要。

典型的 Java 约定:

通过实例访问方法时,人们会期望结果取决于实例的值。

通过Class name访问方法时,人们会期望结果独立于任何实例的值。

你的方式:

您正在通过实例访问方法并期望它独立于任何实例。

那么为什么要使用实例来实现与实例无关的方法呢?这就是它具有误导性的原因。我建议尝试缩短类名,而不是static通过实例访问方法。


推荐阅读