请教JForum论坛的一段代码

吴红军 发布于 2012/03/13 08:18
阅读 496
收藏 0
public class SystemGlobals implements VariableStore
{
	private static SystemGlobals globals = new SystemGlobals();

	private String defaultConfig;
	private String installationConfig;

	private Properties defaults = new Properties();
	private Properties installation = new Properties();
	private Map objectProperties = new HashMap();
	private static List additionalDefaultsList = new ArrayList();
	private static Properties queries = new Properties();
	private SystemGlobals() {}

	/**
	 * 这方法里面的new SystemGlobals不懂中,为什么先实例化再调用?不可以直接定义buildSystem方法为静态方法么?
	 */
	public static void initGlobals(String appPath, String mainConfigurationFile)
	{
		globals = new SystemGlobals();
		globals.buildSystem(appPath, mainConfigurationFile);
	}
	
	public static void reset()
	{
		globals.defaults.clear();
		globals.installation.clear();
		additionalDefaultsList.clear();
		queries.clear();
		transientValues.clear();
	}
	
	private void buildSystem(String appPath, String mainConfigurationFile)
	{
		if (mainConfigurationFile == null) {
			throw new InvalidParameterException("defaultConfig could not be null");
		}

		this.defaultConfig = mainConfigurationFile;
		this.defaults = new Properties();

		this.defaults.put(ConfigKeys.APPLICATION_PATH, appPath);
		this.defaults.put(ConfigKeys.DEFAULT_CONFIG, mainConfigurationFile);
		
		SystemGlobals.loadDefaults();
	
		this.installation = new Properties();
		this.installationConfig = getVariableValue(ConfigKeys.INSTALLATION_CONFIG);
	}
}        
这是JForum论坛的一个SystemGlobals 类,在这个类有个方法initGlobals(),在方法里为什么要先实例化自己再去调用buildSystem方法呢?为什么不把buildSystem方法定义成静态方法,直接调用呢?单态模式?也不是啊,请高人解释下!!!
加载中
0
老程
老程

仅从这个代码片段看,似乎是加载系统设置的单例类。你的疑问是肯定的。

private static SystemGlobals globals = new SystemGlobals();//静态的初始化

private SystemGlobals() {}//私有的构造

确实可以

(不推荐,需要修改其他地方的调用代码)删除initGlobals,把buildSystem 修改为public static

(可以)删除initGlobals里面的globals = new SystemGlobals();一行错误并且多余的。

个人观点,仅做参考。

0
吴红军
吴红军

引用来自“老程”的答案

仅从这个代码片段看,似乎是加载系统设置的单例类。你的疑问是肯定的。

private static SystemGlobals globals = new SystemGlobals();//静态的初始化

private SystemGlobals() {}//私有的构造

确实可以

(不推荐,需要修改其他地方的调用代码)删除initGlobals,把buildSystem 修改为public static

(可以)删除initGlobals里面的globals = new SystemGlobals();一行错误并且多余的。

个人观点,仅做参考。

哇,终于看到你这位好人的回答了,我看了下代码,整个类就这buildSystem方法不是static的,其余的都是静态的,我就在想啊,为什么不直接调用静态方法呢?要么就用单态模式呢?所以我的问题就来了,谢谢你~!非常感谢~!!你的分析,让我膜拜~!
0
linan
linan
晕,懒加载
0
吴红军
吴红军

懒加载?想请问懒加载在java里是什么概念?这貌似是多余的代码吧?不知道"懒"字表现在神马地方?

0
jobell
jobell
老外的代码也会有bug的。这个我猜想就是想实现单例,后期经过修改遗留下来的没有删除的代码。
0
吴红军
吴红军

引用来自“tianxiameng.com”的答案

老外的代码也会有bug的。这个我猜想就是想实现单例,后期经过修改遗留下来的没有删除的代码。
嗯,是的吧,呵,谢谢你的回答。。
返回顶部
顶部