java - “应该以静态方式访问”
问题描述
我有一个可能不必要的繁琐名称的类,其中包含我在其他地方使用的许多静态方法。
而不是用很多东西填充我的代码
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
标签,因此被认为是题外话并被拒绝。但是,我认为这里有空间提出这样的问题,所以我把它留给你们。
解决方案
尽管它在技术上没有害处,因为它在技术上有效,但问题在于它具有误导性,并且实例thing
包含的任何值实际上对于方法的结果都无关紧要。
典型的 Java 约定:
通过实例访问方法时,人们会期望结果取决于实例的值。
通过Class name访问方法时,人们会期望结果独立于任何实例的值。
你的方式:
您正在通过实例访问方法并期望它独立于任何实例。
那么为什么要使用实例来实现与实例无关的方法呢?这就是它具有误导性的原因。我建议尝试缩短类名,而不是static
通过实例访问方法。
推荐阅读
- mysql - 选择元素最小值的行(如果表中存在单行/多行)
- java - 为每种应用程序创建多个 shadowJars
- unity3d - 在 Unity (2D) 中连接具有不同纹理的规则图块
- reporting-services - 如何在 ssrs 中获取上个月的销售总额
- python - 图像背后的理论减去 0.5 然后乘以 2
- javascript - 如何使用帖子 ID 在特定帖子上显示 ajax
- javascript - Angular 仅在没有焦点时更新输入字段
- python - 使用 requests_toolbelt 将大文件发布到 vk
- c# - 如何在 Discord 上正确使用 unirest-net
- angular - 在手机中上传图片 - 甚至不调用 Java 代码