Blu*_*ell 94 java optimization static coding-style
我最近在Eclipse中查看了我的警告并遇到了这个问题:
如果方法可以声明为static,它将给出编译器警告.
[edit] Eclipse帮助中的确切引用,对私有和最终的压力:
启用后,编译器将对private或final方法发出错误或警告,并且仅引用静态成员.
是的我知道我可以关掉它,但我想知道打开它的原因?
为什么将每个方法声明为静态是一件好事?
这会带来任何性能优势吗?(在移动领域)
指出一个方法为静态,我想是显示你不使用任何实例变量因此可以移动到utils样式类?
在一天结束时,我应该关闭它"忽略"或者我应该修复它给我的100多个警告吗?
你认为这只是污染代码的额外关键字,因为编译器无论如何只会内联这些方法吗?(有点像你没有声明每个变量你可以最终但你可以).
Sam*_*lle 132
无论何时编写方法,您都要在给定范围内履行合同.范围越窄,您编写错误的机会就越小.
当方法是静态的时,您无法访问非静态成员; 因此,你的范围更窄.因此,如果您不需要(甚至在子类中)非静态成员来履行您的合同,为什么要为您的方法提供对这些字段的访问权限?static
在这种情况下声明方法将让编译器检查您是否使用了不打算使用的成员.
而且,它将帮助阅读代码的人了解合同的性质.
这就是为什么static
在实际实现静态契约时声明方法被认为是好的.
在某些情况下,您的方法仅表示与您的类的实例相关的内容,并且它的实现实际上并不使用任何非静态字段或实例.在这种情况下,您不会标记该方法static
.
您不使用static
关键字的示例:
Jac*_*ack 15
这里没有优化的概念.
一个static
方法是static
,因为你明确声明该方法不依赖于任何情况下的封装类,只是因为它并不需要.所以Eclipse警告,如文档中所述:
启用后,编译器将对private或final方法发出错误或警告,并且仅引用静态成员.
如果你不需要任何实例变量并且你的方法是私有的(不能从外部调用)或者final(不能被覆盖)那么就没有理由让它成为普通方法而不是静态方法.静态方法本质上更安全,即使只是因为你可以用它做更少的事情(它不需要任何实例,你没有任何隐含的this
对象).
我没有关于性能的信息,我认为它最多略微好一点,因为代码不需要根据类型进行动态调度.
然而,反对重构为静态方法的更强有力的论据是,目前使用静态被认为是不好的做法.静态方法/变量不能很好地集成到面向对象的语言中,并且难以正确测试.这就是为什么一些较新的语言完全放弃静态方法/变量的概念,或者试图以一种与OO更好地发挥作用的方式将其内化到语言中的原因(例如Scala中的对象).
大多数情况下,您需要静态方法来实现仅使用参数作为输入并使用它生成输出的函数(例如,实用程序/辅助函数)在现代语言中,有一个允许的第一类函数概念,所以静态不需要.Java 8将集成lambda表达式,因此我们已经朝着这个方向发展.