2012-04-04 36 views
1

我已經初始化靜態塊內的哈希映射,我需要訪問哈希映射對象來獲取值,使用它在我的getExpo方法中的鍵。如何訪問靜態塊內的對象

我的類放在這裏

public class ExampleFactory { 
    static 
    { 
    HashMap<String,Class<?>> hmap = new HashMap<String,Class<?>>(); 

    hmap.put("app", application.class); 
    hmap.put("expo", expession.class); 
    } 

    public void getExpo(String key,String expression) 
    { 
    // I need to access the object in static block 

    Class aclass=hmap.get(key); // it works when i place it inside main method but 
           // not working when i place the create object for 
           // Hashmap in static block 

    return null; 
    } 
} 

回答

1

聲明變量作爲類的靜態成員,然後填充它在靜態塊:

public class ExampleFactory 
{ 
    // declare hmap 
    static HashMap<String,Class<?>> hmap = new HashMap<String,Class<?>>(); 
    static 
    { 
    // populate hmap 
    hmap.put("app", application.class); 
    hmap.put("expo", expession.class); 

    } 
    //... 
} 

在此之後,你可以從你的類裏訪問它。

在靜態塊中刪除變量使其無法從該塊外部訪問。將它聲明爲類的成員使其可以被類訪問。

+0

謝謝,我明白了 – Jessie 2012-04-04 23:15:00

1

你需要做hmap變量類的靜態成員。

public class YourClass { 
    private static Map<String, Class<?>> hmap = new HashMap<String, Class<?>>(); 

    static { 
     // what you did before, but use the static hmap 
    } 

    public void getExpo(...){ 
     Class aClass = YourClass.hmap.get(key); 
    } 

} 

因爲它是正確的,現在你在靜態塊中聲明它,所以一旦靜態塊執行,它就會丟失。

請注意,您需要確保訪問hmap已同步或以其他方式線程安全,因爲多個實例可能會同時修改地圖。如果有意義的話,你可能還想要最終制作hmap