在私有、受保护、私有或默认之间使用适当的限定符是一种良好的做法。但是,是否还有其他原因,如性能或JVM优化,默认使用的是私有的?作为一个例子
public class Class1{
Class2 class2;
}
变量class2可能是私有的。
另外,如果变量是自动生成的或由DI框架注入的。框架调用field.setAccessible(true)
。这对性能或优化有什么影响吗?
发布于 2016-02-08 12:12:53
我想我现在明白提出这个问题的动机了。
在普通Java中对变量使用正确的访问修饰符的原因是很清楚的。基本上,它都是关于模块化,封装,避免不必要的/有害的耦合等。
那春天呢?
的确,Spring可以绕过正常的访问规则,并允许您注入private
变量。但是,据我所知,您必须使用@autowire
或类似的方法对您的私有字段进行审慎的注释,这样才会发生这种情况。实际上,Spring遵循的是通过注释在源代码中显式声明的“指令”。Spring基于XML的布线不会让您将值注入私有字段或使用私有设置器。
有鉴于此,关于Spring允许您中断私有封装的论点是.虽然严格来说是真的..。最终自私自利。当然你能做到的。但你必须明明白白的故意的.是故意的。只有当物体被连接时才会发生。
相反,如果您对修饰符草率,并将每个实例变量声明为public
或package私有,那么您将打开各种懒散的、考虑不充分的、甚至意外中断封装的可能性。而且,即使您(原始作者)是纪律严明的,下一个阅读/维护您的代码的人也不能确定您是否受到了约束。他必须检查..。
那么,你是如何“强迫”别人听话的呢?
最好是说服而不是强制,但强迫人们编写体面代码的方法是让项目经理/质量经理采用编码标准,并坚持遵循编码标准。(但如果你的管理层不理解劣质的长期成本,那么说起来容易做起来难。)
我们制定这些令人讨厌的编码标准的真正原因是为了能够维护代码.而不是写它的人。一个好的IT经理会理解这一点的。一个好的首相会理解这一点的。一个好的程序员会理解这一点。
发布于 2016-02-08 08:07:17
如果它不打算被任何其他应用程序使用,那么就让它成为私有的。关键是,其他开发人员无法理解您的想法。如果它不是私有的,那么他们会认为,它是用来在课堂之外使用的。
https://stackoverflow.com/questions/35264810
复制相似问题