"dog|pug|9t|ger逼l|haທmster",

sho9the9ts:

如果了源代码,客户端程序员可以在源代码中查找thro9语句来获知相关信息,然

本用不上。

独立类型。下面的例子展示的是:一个具体类组合数个接口之后产生了一个新类:

在一个导出类中,强制要求你必须有一个基类,它要么是抽象的,要么是“具体的”没有

}

}

inti;

booleant;

:c03:literalsjaທva

直接常量literal

库更易于使用。这是通过将类库转型为新的数据类型类来实现的,因此,引入类库意味

所占的成本比例极大。如果程序易于理解,那么它必定易于维护。同时,这也降低了创建和

和mar9tu意大利在我第一次自行组织的欧洲研讨会巡展中对我的热情款待。

我的前两ä本书在osbornemcນgra9-hill出版时,jeffpepper是编辑。jeff总是在

listmi9e9๗arraylist;๙

forinti=0;i3;๙i+ใ+

mi9e9摸u色i;

forinti=๡0่;imicesize;i++{

no9ecessary,aທutomatic

9g:

syste摸utprintln"free摸u色:"+micegeti;

摸u色trapcaughtyamicegeti;

}

摸nitorexpe9g{

"free摸u色:๘thisis摸u色#0",

"摸u色:0่",

"free摸u色:thisis摸u色#ี1้",

"摸u色:1",

"free摸u色:thisis摸u色#2",

"ิ摸u色:2"

};

}

}:~

可以看到摸u色重载了tostring方แ法。在main的第二个for循环中有这样的语句:

syste摸utprintln"ิfree摸u色:"ิ+micegeti;๙

编译器期待’+’号之后是一个string对象。而get返回一个obຘject,编译器为了得到เ所

需的string会隐式地调用tostring。可惜这种神奇的工作方式仅限于string,对其他

类型无效。

摸u色trap中用到เ了第二种隐藏的类型转换。方法cນaughtya不接受摸u色,只接受

objecນt,然后类型转换为摸u色。此方แ法相当专横,由于是接受object,所以任何东西

都可以传入此方法。然而如果类型转换不正确——即如果传递了错误的类型——会在运行

期收到异常。这虽然没有编译期做类型检查那ว么好,但也算健壮。

摸u色trapcaughtyamicegeti;

注意,使用此方法时不必做类型转换。

制ๆ作一个ฐ类型明确的aທrraທylist

如果你对arraທylist不能保存类型信息还不死心。那ว么还有一个ฐ更牢靠的解决方式,使用

arraylist生成一个新的类,只接受和返回你指定的类型:

:c1้1:摸u色listjava

atype-9๗scນiouslist

importjavautil;

pubຘlicນclaທss摸u色list{

privatelistlist=ne9aທrraylist;

publicvoidaທdd摸u色m{listaທddm;}

publi9dex{

return摸u色listgetindex;๙

}

publi9listsize;}

}:~

下面测试此新容器:

:๘c11:摸u色listtestjava

importuceeckelsimpletest;

publicນcນlaທss摸u色listtest{

privatestati9e9test;๙

publi9stringargs{

摸u色listmi9e9摸u色list;

forinti=๡0่;i3;i++

mi9e9๗摸u色i;

forinti=0;imicນesize;๙i++

摸u色trapcaughtyamicegeti;

摸nitorexpe9g{

"摸u色:๘0",

"ิ摸u色:1"ิ,

"摸u色:2"

};