|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
手机用到的是用j2me所编出来的小程序。
只管在一些特定的场所,由clone()发生的当地正本可以取得我们但愿的了局,但程序员(办法的作者)不能不亲身克制别号处置的反作用。假设想制造一个库,令其具有惯例用处,但却不克不及包管它一定能在准确的类中得以克隆,这时候又该怎样办呢?更有大概的一种情形是,假设我们想让别号发扬主动的感化——克制不用要的对象复制——但却不但愿看到由此酿成的反作用,那末又该怎样处置呢?
一个举措是创立“稳定对象”,令其附属于只读类。可界说一个特别的类,使个中没有任何办法能形成对象外部形态的改动。在如许的一个类中,别号处置是没有成绩的。由于我们只能读取外部形态,以是当多处代码都读取不异的对象时,不会呈现任何反作用。
作为“稳定对象”一个复杂例子,Java的尺度库包括了“封装器”(wrapper)类,可用于一切基础数据范例。人人大概已发明了这一点,假如想在一个象Vector(只接纳Object句柄)如许的汇合里保留一个int数值,能够将这个int封装到尺度库的Integer类外部。以下所示:- //:ImmutableInteger.java
- //TheIntegerclasscannotbechanged
- importjava.util.*;
- publicclassImmutableInteger{
- publicstaticvoidmain(String[]args){
- Vectorv=newVector();
- for(inti=0;i<10;i++)
- v.addElement(newInteger(i));
- //Buthowdoyouchangetheint
- //insidetheInteger?
- }
- }///:~
复制代码
Integer类(和基础的“封装器”类)用复杂的情势完成了“稳定性”:它们没有供应能够修正对象的办法。
若的确必要一个包容了基础数据范例的对象,并想对基础数据范例举行修正,就必需亲身创立它们。侥幸的是,操纵十分复杂:- //:MutableInteger.java
- //Achangeablewrapperclass
- importjava.util.*;
- classIntValue{
- intn;
- IntValue(intx){n=x;}
- publicStringtoString(){
- returnInteger.toString(n);
- }
- }
- publicclassMutableInteger{
- publicstaticvoidmain(String[]args){
- Vectorv=newVector();
- for(inti=0;i<10;i++)
- v.addElement(newIntValue(i));
- System.out.println(v);
- for(inti=0;i<v.size();i++)
- ((IntValue)v.elementAt(i)).n++;
- System.out.println(v);
- }
- }///:~
复制代码
注重n在这里简化了我们的编码。
若默许的初始化为零已充足(便不必要构建器),并且不必思索把它打印出来(便不必要toString),那末IntValue乃至还能加倍复杂。以下所示:
classIntValue{intn;}
将元素掏出来,再对其举行外型,这几显得有些愚笨,但那是Vector的成绩,不是IntValue的错。
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。 |
|