パスワードを忘れた? アカウント作成
431547 journal

kaihou999の日記: java.util.ResourceBundle

日記 by kaihou999
 ちょっとした要求のために、ResourceBundleから利用している
.propatiesファイルをリロードしなければならなくなった。
 reflectionを利用して以下のようなコードを作成したら、
ResourceBundleのインスタンス自体は、再生成されるようになったのだが…。

--------------------------------------------------------------------------
    public static void deleteResourceBundleCache(String name){
        try{
            Class c = ResourceBundle.class;
            Field f = c.getDeclaredField("cacheList");
            f.setAccessible(true);
            SoftCache map = (SoftCache)f.get(null);
            List keys = getSearchKey(map, name);
            for(int i = 0; i < keys.size(); i++){
                map.remove(keys.get(i));
            }
        }catch(Throwable t){
            t.printStackTrace();
        }

    }

    private static List getSearchKey(SoftCache map, String name){
        List delKey = new ArrayList();
        for(Iterator i = map.keySet().iterator(); i.hasNext(); ){
            Object key = i.next();
            Class keyClass = key.getClass();
            try{
                Field keyField = keyClass.getDeclaredField("searchName");
                keyField.setAccessible(true);
                String keyValue = (String)keyField.get(key);
                if(keyValue.indexOf(name) >= 0){
                    delKey.add(key);
                }
            }catch(IllegalAccessException e){
            }catch(NoSuchFieldException e){
            }
        }
        return delKey;
    }
--------------------------------------------------------------------------

 確かに再生成する…のだけど、キャッシュされたファイルにアクセス
しているらしく、結局再作成しないときと同じ動きになってしまった。
 むむぅ。戦術が間違ってた臭いな(汗
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

物事のやり方は一つではない -- Perlな人

読み込み中...