歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 使用接近C++的Java宏控

使用接近C++的Java宏控

日期:2017/3/1 10:23:20   编辑:Linux編程

現狀描述

宏控是管理開發代碼的重要手段,特別是C/C++項目。通過引入宏控,我們可以為每個項目配置一個config文件,裡面定義了所有的功能宏控的狀態(開啟 or 關閉)。

不同於C/C++, java 中沒有原生的預編譯命令,目前廣泛采用的方式是使用靜態變量近似代替宏。但是這也為項目管理帶來一點點麻煩:

A,B兩項目在同一套代碼上開發,通過config文件實現不同的功能。然而,即使是單獨為B項目定制的功能,也必須在A項目中添加相應的宏控,否則會造成編譯通不過。這樣做至少造成兩個問題:

1. 項目實際配置的功能項不醒目。各種需要的不需要的功能混雜在一起。

2. 項目的配置文件隨著開發一直處於變更狀態,而且隨著項目和分支增加,維護將變得困難,容易有漏網之魚。

解決方法】出現上面困難的根本點是靜態變量不同於預編譯命令——不定義即為false。 好在通過繼承方式我們可以模擬實現這一點。

利用基類作默認設置,在派生類中通過重定義配置需要的功能,從而實現一種類似於C/C++的預編譯宏控的效果,上面的兩個問題也迎刃而解。

1. 為所有配置文件設置一個基類,基類中定義了所有宏控,且默認總為關閉狀態。

2. 所有項目的配置文件均繼承自此基類,如果需要開啟某功能,則在該文件中將對應宏控重新定義為開啟狀態。

Example

/**

* 這個類所在的文件不抽取,且配置所有功能,config1,config2,。。。

* @author

*/

publicclass DefaultConfig {

/* config 1 */

publicstatic finalboolean config1 =false;

/* config 2 */

publicstatic finalboolean config2 =false;

}

/**

* 這個類所在的文件需要抽取,代表具體某個項目的配置。

* 如果需要配置config1,則重定義config1 = true

* 如果不需要配置config2,則根本不用做任何處理。就像C/C++的預編譯宏控

* @authorl

*/

publicclass Config extendsDefaultConfig {

/* needconfig 1 */

publicstatic finalboolean config1 =true; //重定義

}


嗯,是不是很接近C++的java宏控呢

Copyright © Linux教程網 All Rights Reserved