日期:2011-03-22 16:17:00 来源:本站整理
java只读类[Java编程]
本文“java只读类[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
固然在一些特定的场所,由clone()产生的本地副本可以得到我们但愿的后果,但程序员(办法的作者)不得不亲身禁止别名处理的副作用.假定想制作一个库,令其具有通例用处,但却不能担保它必定能在精确的类中得以克隆,这时又该怎么办呢?更有大概的一种情形是,假定我们想让别名施展主动的作用——禁止不必要的对象复制——但却不但愿看到由此造成的副作用,那么又该若何处理呢?
一个办法是成立“不变对象”,令其从属于只读类.可定义一个特别的类,使此中没有任何办法能造成对象内部状况的改变.在这样的一个类中,别名处理是没有问题的.因为我们只能读取内部状况,所以当多处代码都读取相同的对象时,不会呈现任何副作用.
作为“不变对象”一个简单例子,Java的尺度库包含了“封装器”(wrapper)类,可用于全部基本数据范例.大家大概已发现了这一点,假如想在一个象Vector(只采取Object句柄)这样的调集里保存一个int数值,可以将这个int封装到尺度库的Integer类内部.以下所示:
Integer类(以及基本的“封装器”类)用简单的情势实现了“不变性”:它们没有供应可以改正对象的办法.//: ImmutableInteger.java // The Integer class cannot be changed import java.util.*; public class ImmutableInteger { public static void main(String[] args) { Vector v = new Vector(); for(int i = 0; i < 10; i++) v.addElement(new Integer(i)); // But how do you change the int // inside the Integer? } } ///:~
若确切需求一个包容了基本数据范例的对象,并想对基本数据范例举行改正,就必须亲身成立它们.幸运的是,操作非常简单:
注意n在这里简化了我们的编码.//: MutableInteger.java // A changeable wrapper class import java.util.*; class IntValue { int n; IntValue(int x) { n = x; } public String toString() { return Integer.toString(n); } } public class MutableInteger { public static void main(String[] args) { Vector v = new Vector(); for(int i = 0; i < 10; i++) v.addElement(new IntValue(i)); System.out.println(v); for(int i = 0; i < v.size(); i++) ((IntValue)v.elementAt(i)).n++; System.out.println(v); } } ///:~
若默许的初始化为零已经充足(便不需求构建器),并且不用考虑把它打印出来(便不需求toString),那么IntValue乃至还能越发简单.以下所示:
class IntValue { int n; }
将元素取出来,再对其举行造型,这多少显得有些拙笨,但那是Vector的问题,不是IntValue的错.
以上是“java只读类[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:<b>成立java只读类</b>
- ·下一篇文章:副本构建器
- ·中查找“java只读类”更多相关内容
- ·中查找“java只读类”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论