日期:2011-03-22 16:17:00 来源:本站整理
"一成不变"的弊端(java)[Java编程]
本文“"一成不变"的弊端(java)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
从表面看,不变类的成立仿佛是一个好筹划.但是,一旦真的需求那种新范例的一个改正的对象,就必须辛劳地举行新对象的成立工作,同时还有大概触及更频繁的垃圾汇集.对有些类来说,这个问题并非很大.但对其他类来说(比方String类),这一筹划的代价显得太高了.
为办理这个问题,我们可以成立一个“同志”类,并使其可以改正.今后只要触及大量的改正工作,便可换为利用能改正的同志类.完事今后,再切换回不可变的类.
因此,上例可改成下面这个模样:
和平常一样,Immutable2包含的办法保存了对象不可变的特点,只要触及改正,就成立新的对象.完成这些操作的是add()和multiply()办法.同志类叫作Mutable,它也含有add()和multiply()办法.但这些办法可以改正Mutable对象,而不是新建一个.除此以外,Mutable的一个办法可用它的数据产生一个Immutable2对象,反之亦然.//: Immutable2.java // A companion class for making changes // to immutable objects. class Mutable { private int data; public Mutable(int initVal) { data = initVal; } public Mutable add(int x) { data += x; return this; } public Mutable multiply(int x) { data *= x; return this; } public Immutable2 makeImmutable2() { return new Immutable2(data); } } public class Immutable2 { private int data; public Immutable2(int initVal) { data = initVal; } public int read() { return data; } public boolean nonzero() { return data != 0; } public Immutable2 add(int x) { return new Immutable2(data + x); } public Immutable2 multiply(int x) { return new Immutable2(data * x); } public Mutable makeMutable() { return new Mutable(data); } public static Immutable2 modify1(Immutable2 y){ Immutable2 val = y.add(12); val = val.multiply(3); val = val.add(11); val = val.multiply(2); return val; } // This produces the same result: public static Immutable2 modify2(Immutable2 y){ Mutable m = y.makeMutable(); m.add(12).multiply(3).add(11).multiply(2); return m.makeImmutable2(); } public static void main(String[] args) { Immutable2 i2 = new Immutable2(47); Immutable2 r1 = modify1(i2); Immutable2 r2 = modify2(i2); System.out.println("i2 = " + i2.read()); System.out.println("r1 = " + r1.read()); System.out.println("r2 = " + r2.read()); } } ///:~
两个静态办法modify1()和modify2()揭暴露得到一样后果的两种差别办法.在modify1()中,全部工作都是在Immutable2类中完成的,我们可看到在进程中成立了四个新的Immutable2对象(并且每次重新分配了val,前一个对象就成为垃圾).
在办法modify2()中,可看到它的第一个行动是获得Immutable2 y,然后从中生成一个Mutable(近似于前面对clone()的调用,但这一次成立了一个差别范例的对象).随后,用Mutable对象举行大量改正操作,同时用不着新建很多对象.最后,它切换回Immutable2.在这里,我们只成立了两个新对象(Mutable和Immutable2的后果),而不是四个.
这一办法分外合适在下述场所利用:
(1) 需求不可变的对象,并且
(2) 常常需求举行大量改正,大概
(3) 成立新的不变对象代价太高
以上是“"一成不变"的弊端(java)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:java不变字串
- ·下一篇文章:<b>成立java只读类</b>
- ·中查找“"一成不变"的弊端(java)”更多相关内容
- ·中查找“"一成不变"的弊端(java)”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论