栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否可以在资源束中包含资源束文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否可以在资源束中包含资源束文件

首先,我想知道为什么您选择

java.util.ResourceBundle
java.util.Properties
。给出问题的表达方式后,您似乎不必关心本地化/国际化或捆绑文件继承。

有了

Properties
它,它就变得异常容易,因为它实现
Map
了反过来又提供了
putAll()
一种合并另一张地图的方法。开球示例:

Properties master = new Properties();master.load(masterInput);Properties moduleA = new Properties();moduleA.load(moduleAinput);master.putAll(moduleA);Properties moduleB = new Properties();moduleB.load(moduleBinput);master.putAll(moduleB);// Now `master` contains the properties of all files.

如果您真的坚持使用

ResourceBundle
,则最好的选择是创建一个自定义
ResourceBundle
,在该自定义中使用自定义控制加载
Control

假设您具有以下条目,

master.properties
其中表示一个以逗号分隔的字符串,带有模块属性文件的基本名称:

include=moduleA,moduleB

然后,以下自定义

ResourceBundle
示例应该起作用:

public class MultiResourceBundle extends ResourceBundle {    protected static final Control ConTROL = new MultiResourceBundleControl();    private Properties properties;    public MultiResourceBundle(String baseName) {        setParent(ResourceBundle.getBundle(baseName, CONTROL));    }    protected MultiResourceBundle(Properties properties) {        this.properties = properties;    }    @Override    protected Object handleGetObject(String key) {        return properties != null ? properties.get(key) : parent.getObject(key);    }    @Override    @SuppressWarnings("unchecked")    public Enumeration<String> getKeys() {        return properties != null ? (Enumeration<String>) properties.propertyNames() : parent.getKeys();    }    protected static class MultiResourceBundleControl extends Control {        @Override        public ResourceBundle newBundle( String baseName, Locale locale, String format, ClassLoader loader, boolean reload)     throws IllegalAccessException, InstantiationException, IOException        { Properties properties = load(baseName, loader); String include = properties.getProperty("include"); if (include != null) {     for (String includebaseName : include.split("\s*,\s*")) {         properties.putAll(load(includebaseName, loader));     } } return new MultiResourceBundle(properties);        }        private Properties load(String baseName, ClassLoader loader) throws IOException { Properties properties = new Properties(); properties.load(loader.getResourceAsStream(baseName + ".properties")); return properties;        }    }}

(忽略异常处理和本地化处理,这取决于您)

可以用作:

ResourceBundle bundle = new MultiResourceBundle("master");


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453262.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号