【问题标题】:Apache Configuration add object instead of StringApache 配置添加对象而不是字符串
【发布时间】:2018-03-18 05:23:37
【问题描述】:

我的 apache 配置有问题。是否可以添加对象而不是它们的字符串表示形式?

例如,我想保存整个“SiteNode”而不是“toString()”变体:

public void persistSiteTree(Context context, Configuration config) {
    List<SiteNode> nodes = Model.getSingleton().getSession().getNodesInContextFromSiteTree(context);
    config.addProperty(CONFIG_PROPERTY_AUTHORISATION, nodes);
}

public void loadSiteTree(Context context, Configuration config) {
    List<Object> nodes = new ArrayList<>();
    nodes = config.getList(CONFIG_PROPERTY_AUTHORISATION, nodes);
    if(nodes != null && !nodes.isEmpty()) {
        // Load in sites tree
        SiteNode node = (SiteNode) nodes.get(0); // Gives error as String cannot be cast to "SiteNode"
    }
}

但是当我调用“loadSiteTree”时,它给我的字符串不能是 SiteNode 的大小写。 Apache可以保存对象吗?

【问题讨论】:

    标签: java string object data-conversion apache-commons-config


    【解决方案1】:

    getList() 的重载版本支持将数据类型转换为特定目标类。

    看看documentation

    &lt;T&gt; List&lt;T&gt; getList(Class&lt;T&gt; cls, String key, List&lt;T&gt; defaultValue)

    获取与给定配置关联的类型化对象列表 如果键未映射到某个键,则键返回指定的默认值 现有对象。

    这样的东西应该适合你:

    List&lt;SiteNode&gt; nodes = config.getList(SiteNode.class,CONFIG_PROPERTY_AUTHORISATION, nodes);

    【讨论】:

    • 感谢您对此进行调查。我不知道为什么,但是我的 apache.commons.Configuration 中不存在这种方法。有 2 个变体:getList(String key) 和 getList(String key, list default)
    • 你用的是哪个版本?
    • 1.9.但我正在开发一个插件,因此无法改变它。插件的论坛没有这样的部分所以这就是我在这里问的原因(:
    • 这是从 2.0 开始提供的,所以你不能使用它。
    • 嗯,真不幸。我想我必须找到一个解决方法
    猜你喜欢
    • 1970-01-01
    • 2011-08-06
    • 2014-02-08
    • 1970-01-01
    • 2017-12-23
    • 2020-10-15
    • 1970-01-01
    • 2021-08-11
    • 2017-07-18
    相关资源
    最近更新 更多