昨天買了Core Java2 第七版的上卷。開始閱讀就看到了許多J2SE的新特性,呵呵,很是激動人心。我會發一系列的文章來介紹。首先這一篇講靜態導入,解決我上面的Config問題。
本文分三個部分:
?
1,講述我上面遇到的Config問題的大概和目前的解決方法
2,講述用了靜態導入后的解決方法
3,對靜態導入的介紹,簡單實例。
?
各位可以選讀。
?
----------------------------------------------
首先,問題描述。
?
我看到了apache.commons下面有一個項目叫做Configuration。是這樣使用的:(以其中的PropertiesConfiguration類為例)
?
PropertiesConfiguration?config?
=
?
new
?PropertiesConfiguration(
"
config.properties
"
);
?
上面是實例化,讀入配置,然后便可以使用config提供的一系列方法獲取配置屬性,例如:
?
config.getString(key)
config.getDouble(key)
String[]?colors?
=
?config.getString(key);
//
獲取相同key的屬性集合
?
我要在系統中使用這個類,那么,我建立了一個自己的SystemConfig類,其中有一個靜態屬性,config,是PropertiesConfiguration類的對象。在系統初始化的時候,初始化這個config對象。我希望我將來用SystemConfig.getString(key)之類的靜態方法類獲取配置,卻又不能寫n各靜態方法來調用靜態屬性config的相應方法。
?
所以我用了單態。最后的結果在客戶端是這樣的:
?
SystemConfig.getInstance().getString(key);
?
getInstance方法返回的是類中的靜態屬性config,這樣我就可以隨意調用config中的所有方法了。
?
但終究沒能做到ClassA.getXXX(key)這樣的獲取方式。
?
OK,問題描述完畢
-----------------------------------------
?
?
J2SE 5.0中提供了一種全新的導入方式,以前的import只能導入包,類,現在這種導入方式,可以導入類的屬性,方法了。
?
先給出一個寫法:
?
import
?
static
?com.lingdot.ConfigBuilder.SystemConfig;
?
注意其中多了一個static關鍵字。另外注意ConfigBuilder是一個類,而SystemConfig是這個類的一個屬性。相當于現在我們把SystemConfig這個屬性導入到了當前類。
來看我的ConfigBuilder類,其中定義了一個PropertiesConfiguration類的對象,作為public的屬性,還定義了一個init(String path)方法,用于初始化。
?
系統啟動時,調用ConfigBuilder.init(String path)方法,初始化其中的SystemConfig屬性。
?
然后再后面的其他類中,如上這樣寫:
?
import
?
static
?com.lingdot.ConfigBuilder.SystemConfig;
?
那么在這個類中,就可以象下面這樣獲取配置了:
?
SystemConfig.getString(key);
SystemConfig.getDouble(key);


?
從而實現了我的目標。
?
------------------------------------------------
下面是對J2SE 5.0中的靜態導入的一點介紹:
?
例如,我在程序開始這樣寫:
?
import
?
static
?System.out;
?
那么在我的程序中,就可以這樣寫:
?
out.println(
"
aaa
"
);
?
我想一看這個例子,你就明白是怎么回事了。
?
前面都是導入屬性,下面是導入方法的例子:
?
import
?
static
?java.util.Math.
*
;
?
然后你求開放就可以這樣寫
?
double
?a?
=
?sqrt(
2
);
?
---------------------------------------
?
更多的信息可以在網上獲取。