首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“应以静态方式访问”

“应以静态方式访问”
EN

Stack Overflow用户
提问于 2020-02-05 18:48:49
回答 2查看 173关注 0票数 5

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

而不是用大量的

代码语言:javascript
复制
VeryUnnecessarilyLongCumbersomeName.doThingFoo();
VeryUnnecessarilyLongCumbersomeName.doThingBar();
VeryUnnecessarilyLongCumbersomeName.doThingEgg();
VeryUnnecessarilyLongCumbersomeName.doThingSpam();

我宁愿

代码语言:javascript
复制
VeryUnnecessarilyLongCumbersomeName thing = new VeryUnnecessarilyLongCumbersomeName();
thing.doThingFoo();
thing.doThingBar();
thing.doThingEgg();
thing.doThingSpam();

但是,这会得到警告。

代码语言:javascript
复制
"the static method doThingFoo() should be accessed in a static way."

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

但我并不认为这应该是个警告。这样做有什么害处?是否有一种更优雅/更正确的方法使我的代码不那么笨重--这不是上述解决方案之一?

注意:我怀疑这可能是coding-style标签的理由,因此被认为是非主题的,并被拒绝。我在想这样的问题还有空间,所以我就留给你们了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-05 18:59:31

虽然它在技术上并不有害,因为它在技术上是有效的,但问题在于它具有误导性,而且实例thing包含的任何值实际上对方法的结果都不重要。

典型Java公约:

当通过实例访问方法时,人们会期望结果是依赖于实例的值的

当通过类名访问方法时,人们会期望结果是任何实例的值的独立的

Your:

您正在通过实例访问方法,并期望它是任何实例的独立的

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

票数 3
EN

Stack Overflow用户

发布于 2020-02-05 18:57:53

更改VeryUnnecessarilyLongCumbersomeName类如何?

静态方法可以在没有实例的情况下使用。如果您想要调用方法而不首先初始化类,则应该使用它们。使用静态方法的缺点是,您失去了各种OOP好处;您失去了虚拟调度和随后的多态。不能在派生类中重写该方法。当然,您可以在派生类中声明new (static)方法,但是任何访问它的代码都必须知道整个类层次结构,并进行显式检查和转换,这正是OO应该避免的。

而且,这也令人困惑。当另一个程序员看到您的代码时,他/她会在看到一个static时考虑,他/她会假设它不需要一个有效的实例来调用该方法。

不要这样做,坚持最佳实践=)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60082299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档