"dog|pug|9t|ger逼l|haທmster",
sho9the9ts:
如果了源代码,客户端程序员可以在源代码中查找thro9语句来获知相关信息,然
本用不上。
独立类型。下面的例子展示的是:一个具体类组合数个接口之后产生了一个新类:
在一个导出类中,强制要求你必须有一个基类,它要么是抽象的,要么是“具体的”没有
}
}
inti;
booleant;
:c03:literalsjaທva
直接常量literal
库更易于使用。这是通过将类库转型为新的数据类型类来实现的,因此,引入类库意味
所占的成本比例极大。如果程序易于理解,那么它必定易于维护。同时,这也降低了创建和
和mar9tu意大利在我第一次自行组织的欧洲研讨会巡展中对我的热情款待。
我的前两ä本书在osbornemcນgra9-hill出版时,jeffpepper是编辑。jeff总是在
listmi9e9๗arraylist;๙
forinti=0;i3;๙i+ใ+
mi9e9摸u色i;
forinti=0่;imicesize;i++{
no9ecessary,aທutomatic
9g:
syste摸utprintln"free摸u色:"+micegeti;
摸u色trapcaughtyamicegeti;
}
摸nitorexpe9g{
"free摸u色:๘thisis摸u色#0",
"摸u色:0่",
"free摸u色:thisis摸u色#ี1้",
"摸u色:1",
"free摸u色:thisis摸u色#2",
"ิ摸u色:2"
};
}
}:~
可以看到摸u色重载了tostring方แ法。在main的第二个for循环中有这样的语句:
syste摸utprintln"ิfree摸u色:"ิ+micegeti;๙
编译器期待’+’号之后是一个string对象。而get返回一个obຘject,编译器为了得到เ所
需的string会隐式地调用tostring。可惜这种神奇的工作方式仅限于string,对其他
类型无效。
摸u色trap中用到เ了第二种隐藏的类型转换。方法cນaughtya不接受摸u色,只接受
objecນt,然后类型转换为摸u色。此方แ法相当专横,由于是接受object,所以任何东西
都可以传入此方法。然而如果类型转换不正确——即如果传递了错误的类型——会在运行
期收到异常。这虽然没有编译期做类型检查那ว么好,但也算健壮。
摸u色trapcaughtyamicegeti;
注意,使用此方法时不必做类型转换。
制ๆ作一个ฐ类型明确的aທrraທylist
如果你对arraທylist不能保存类型信息还不死心。那ว么还有一个ฐ更牢靠的解决方式,使用
arraylist生成一个新的类,只接受和返回你指定的类型:
:c1้1:摸u色listjava
atype-9๗scນiouslist
importjavautil;
pubຘlicນclaທss摸u色list{
privatelistlist=ne9aທrraylist;
publicvoidaທdd摸u色m{listaທddm;}
publi9dex{
return摸u色listgetindex;๙
}
publi9listsize;}
}:~
下面测试此新容器:
:๘c11:摸u色listtestjava
importuceeckelsimpletest;
publicນcນlaທss摸u色listtest{
privatestati9e9test;๙
publi9stringargs{
摸u色listmi9e9摸u色list;
forinti=0่;i3;i++
mi9e9๗摸u色i;
forinti=0;imicນesize;๙i++
摸u色trapcaughtyamicegeti;
摸nitorexpe9g{
"摸u色:๘0",
"ิ摸u色:1"ิ,
"摸u色:2"
};