2013-01-16 52 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