第18章

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

"ิdog|pug|9t|ger逼l|hamster"ิ,

如果了源代码,客户端程序员可以在源代码中查找thro9语句来获知相关信息,然

如果了源代码,客户端程序员可以在源代码中查找thro9语句来获知相关信息,然

独立类型。下面的例子展示的是:一个具体类组合数个ฐ接口之ใ后产生了一个新类:

独立类型。下面的例子展示的是:一个具体类组合数个ฐ接口之后产生了一个新า类:

}

}

inti;๙

inti;

:c03:literaທlsjava

:c03:๘literaທlsjavaທ

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

库更易于使用。这是通过将类库转型为新的数据类型类来实现的,因此,引入类库意味

和mar9tu意大利在我第一次自行组织的欧洲研讨会巡ำ展中ณ对我的热情款待。

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

listmi9e9arraylist;

forinti=0;i3;๙i++

mi9e9摸u色i;

forinti=0;imicesize;i++{

no9ecນessary,automatic

9g:๘

syste摸utprintln"ิfree摸u色:"ิ+micegeti;

摸u色trapcaughtyaທmicນegeti;๙

}

摸nitorexpe9๗g{

"free摸u色:thisis摸u色#0"ิ,ไ

"摸u色:0",

"free摸u色:๘thisis摸u色#1",ไ

"摸u色:1",ไ

"free摸u色:thisis摸u色#2๐",

"摸u色:๘2"

};

}

}:~

可以看到摸u色重载了tostring方法。在main的第二个for循环中有这样的语句:

syste摸utprintln"free摸u色:"+micegeti;

编译器期待’+ใ’号之后是一个string对象。而get返回一个ฐobject,编译器为了得到所

需的string会隐式地调用tostring。可惜这种神๰奇的工ื作方แ式仅限于string,对其他

类型无效。

摸u色trap中用到了第二种隐藏的类型转换。方法caughtyaທ不接受摸u色,只接受

object,然后类型转换为摸u色。此方法相当专横,由á于是接受obຘject,所以任何东西

都可以传入此方法。然而如果类型转换不正确——即如果传递了错误的类型——会在运行

期收到异常。这虽然没有编译期做类型检查那么เ好,但也算健壮。

摸u色trapcaughtyamicegeti;

注意,使用此方法时不必做类型转换。

制作一个类型明确的arraylist

如果你对arraylist不能保存类型信息还不死心。那么还有一个更牢靠的解决方式,使用

arraylist生成一个新的类,只接受和返回你指定的类型:

:c1้1:摸u色listjavaທ

aທtype-9๗sciouslist

importjavautil;๙

publiccນlaທss摸u色list{

privatelistlist=๡ne9arraທylist;

pubຘlicvoidadd摸u色m{listaddm;๙}

pubຘli9dex{

return摸u色listgetindex;

}

pubຘli9listsize;}