Ram*_*Ram 41 java immutability
public class Test {
private final String url;
public Test(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
}
Run Code Online (Sandbox Code Playgroud)
Test类有:
但是我正在阅读的一本书说上面的Test类是可变的,因为:
这两个类都不是最终的,因此它可以扩展,并且子类可以覆盖实例方法.但Test类实际上没有构造函数以外的任何实例方法.
构造函数也不是私有的.
你能帮我理解为什么Test类是可变的吗?
gus*_*afc 58
Test尽管是直接实例,但不保证任意实例是不可变的Test.但请考虑这个子类:
public class MutableTest extends Test {
private int mutable;
public MutableTest(String url) {
super(url);
}
@Override
public String getUrl() {
return super.getUrl() + mutable++;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样写:
Test instance = new MutableTest("http://example.com/");
String firstGet = instance.getUrl();
String secondGet = instance.getUrl();
assertEquals(firstGet, secondGet); // Boom!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2740 次 |
| 最近记录: |