第
五
道虎紋:
靜態(tài)引入
機(jī)制
?
管中窺虎
在學(xué)習(xí)
java 1.5
的過(guò)程中,我使用了
sun
公布的
tutorial
,這份文檔寫的比較詳盡易明,但是對(duì)于想快速了解
tiger
而且具有較好
java
基礎(chǔ)的人來(lái)說(shuō),大篇幅的英文文檔是比較耗時(shí)間和非必需的,所以我將會(huì)歸納這份文檔的主要內(nèi)容,在保證理解的底線上,盡力減少閱讀者需要的時(shí)間。
?
在以下地址可以進(jìn)入各新增語(yǔ)言特色介紹以及下載相關(guān)文檔(若有)。
http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html
?
2006
年
8
月
17
日
星期四
Static import
?
要使用一個(gè)類的靜態(tài)成員,就要添加上類的名稱,比如:
double
?r?
=
?Math.cos(Math.PI?
*
?theta);

//
theta是一個(gè)數(shù)值變量,不是外部static?成員,原文并未注明。
為了擺脫這些類名,有些程序員會(huì)把靜態(tài)成員放到一個(gè)接口里然后去實(shí)現(xiàn)這個(gè)接口,這個(gè)可不好。實(shí)際上,這樣做已經(jīng)糟糕到有幸成為了反模式:
Constant Interface Antipattern
。(參加
Effective java Item 17
)
一個(gè)類用別的類的靜態(tài)成員是實(shí)現(xiàn)的細(xì)節(jié),而當(dāng)這個(gè)類實(shí)現(xiàn)這樣的接口時(shí),這個(gè)接口就成為了這個(gè)類的接口的一部分,而實(shí)現(xiàn)細(xì)節(jié)是不應(yīng)該漏入到
public
的接口中。
而
static import
可以讓一個(gè)類可以不需要指定類名地使用靜態(tài)成員,而且不需繼承額外的接口,它引入了這些成員,可以單獨(dú)地或者全體引入:
import
?
static
?java.lang.Math.PI;

import
?
static
?java.lang.Math.
*
;
然后就可以簡(jiǎn)潔地使用它們:
?
double
?r?
=
?cos(PI?
*
?theta);
?
static import
和以前的
import
類似,
import
從包里引入
class,
而
static import
從類里引入成員。
又到了經(jīng)典一問(wèn):何時(shí)該用這個(gè)新特色?
要很謹(jǐn)慎地使用!只有當(dāng)你不用它就被迫要么聲明外部
static
成員的本地副本要么就墮落到那個(gè)反模式中的時(shí)候,你才應(yīng)該用它,換言之,當(dāng)你需要頻繁地使用某一兩個(gè)類的靜態(tài)成員時(shí)才應(yīng)該使用
static import
。濫用的后果就是讓你的代碼可讀性變差,命名空間被大量的引入的靜態(tài)成員所污染。若干星期后,連你自己都讀得不明不白。而且如果只是用得到其中的一兩個(gè)成員,就不要用批量的引入了。
?
posted on 2006-08-17 18:10
Ye Yiliang 閱讀(1149)
評(píng)論(4) 編輯 收藏 所屬分類:
Java