Raj*_*Raj 8 java final immutability
定义不可变类的策略说明了这一点
所有领域都应该是最终的.
例如:
private String name;
Run Code Online (Sandbox Code Playgroud)
为什么它必须是最终的?
既然我没有给它制定setter方法呢?它无法改变.谢谢.
Pet*_*rey 19
如果你读
private final String name;
Run Code Online (Sandbox Code Playgroud)
你知道这个领域是不可变的.
如果你读
private String name;
Run Code Online (Sandbox Code Playgroud)
你必须阅读整个班级以检查它是否在任何地方都没有改变.这对你来说意味着更多的工作.
你现在可能还记得,刚刚写完了你没有添加二传手的课程,但是在写完了更多的课程后,你会在六个月后阅读自己的课程,你将无法可靠地记住.
即使现在没有改变,有人(可能是你自己)也可以通过添加代码来改变它.但是,您可能已经假设值不会改变.
简而言之,只有在你意味着要改变的价值时才将其作为非最终结果,并在你不期望它改变时将其作为最终结果.不要留下它可能/可能不是.
现在想象一下你习惯于清楚哪些字段可以改变哪些字段不能改变.在阅读其他代码时,这可以为您节省大量工作.但是你发现你正在阅读不清楚的代码并且非最终并不意味着它已经改变了,现在意味着你必须检查一下,你通常不必检查哪一个更难以理解一些你真的不需要的代码.
一个简单的例子,说明读取代码以确定字段是否有效最终是多么困难.
public class A {
static class B {
private int x;
}
// some code
Run Code Online (Sandbox Code Playgroud)
到目前为止,这一切看起来都很好,没有制定者甚至是方法B.那么B.x一成不变吗?
static class C {
public void update(B b, int x) {
b.x = x; // this really compiles
}
}
}
Run Code Online (Sandbox Code Playgroud)
哎呀,你必须阅读整个类文件.
final当你编写代码时,你可以更好地制作每个字段(应该是默认的恕我直言),而不是留给别人后来弄清楚.
| 归档时间: |
|
| 查看次数: |
3471 次 |
| 最近记录: |