2013-01-16 37 views
-2

從配置加載器類訪問靜態字段「緩存」的方式有什麼問題嗎?僅供參考,CacheEngine是爲memcached實現緩存客戶端的接口。訪問靜態成員字段會導致空指針異常

public class Test { 
    ... 
    getCache(){ 
     ... 
     try{ 
     cacheData = ConfigLoader.cache.get(key); // Accessing the static 'cache' memeber returns Null Pointer Exception 
     ... 
     } 
    } 
} 

//ConfigLoader Class 
public class ConfigLoader{ 
    public static CacheEngine cache; 
    ... 
} 
+4

呃......確保ConfigLoader.cache在你訪問它之前被初始化? –

回答

5

這是壞的設計,但您訪問它的方式是正確的。你的問題是,cache未初始化。你需要做這樣的地方:您訪問之前緩存

if (cache==null) cache = new CacheEngine(...); 

只是初始化它,你訪問它之前

public static CacheEngine cache = new CacheEngine(...); 
1

做。同樣在一個好的OOP設計中,你可以創建一個靜態初始化方法。

2

我想你可能還沒有intialised的static CacherEngine cache;
要intialise添加以下代碼static構造在ConfigLoader class

static{ 
cache=new CacheEngine(...);} 

這是一種替代方法,但它不是recommended.Add此你的聲明: public static CacheEngine cache=new CacheEngine