java:首选项API与Apache Commons配置

java:首选项API与Apache Commons配置,java,configuration,apache-commons,Java,Configuration,Apache Commons,我需要允许用户存储/加载任意数量的对象列表(假设它们是可序列化的)。从概念上讲,我想要一个像 class FooBean { /* bean stuff here */ } class FooList { final private Set<FooBean> items = new HashSet<FooBean>(); public boolean add(FooBean item) { return items.add(item); } p

我需要允许用户存储/加载任意数量的对象列表(假设它们是可序列化的)。从概念上讲,我想要一个像

class FooBean { /* bean stuff here */ }

class FooList {
    final private Set<FooBean> items = new HashSet<FooBean>();

    public boolean add(FooBean item) { return items.add(item); }
    public boolean remove(FooBean item) { return items.remove(item); }
    public Collection<FooBean> getItems() { 
       return Collections.unmodifiableSet(items); 
    }
}

class FooStore {
    public FooStore() {
       /* something... uses Preferences or Commons Configuration */ 
    }
    public FooList load(String key) {
       /* something... retrieves a FooList associated with the key */ 
    }
    public void store(String key, FooList items) { 
       /* something... saves a FooList under the given key */
    }
}
class FooBean{/*bean stuff here*/}
阶级愚人{
final private Set items=new HashSet();
公共布尔添加(FooBean项){return items.add(项);}
公共布尔删除(FooBean项){return items.remove(项);}
公共集合getItems(){
返回集合。不可修改集合(项);
}
}
高级食品店{
公共食品店(){
/*某物…使用首选项或公用配置*/
}
公共傻瓜加载(字符串键){
/*某物…检索与密钥关联的傻瓜*/
}
公共无效存储(字符串键,傻瓜项){
/*某样东西…在给定的钥匙下救了一个傻瓜*/
}
}

我应该用手术室吗?每种方法的优点是什么?

我通常会选择Preferences API,它是JDK的一部分,除非有其他问题可以通过commons配置解决


就我个人而言,当我使用spring时,它有一个属性配置器,可以为我完成大部分这些工作。

好吧,commons配置就像许多apache项目一样,是一个抽象层,允许人们无需使用首选项、ldap存储、属性文件等等。
因此,您的问题可以按原样重写:您是否需要更改用于存储首选项的格式?如果没有,java首选项就是解决方法。在其他地方,考虑公有配置的可移植性。

给出了存储一组与密钥相关联的值的示例,当使用每个库

时,您似乎具有以下选项
  • 首选项-存储为与密钥关联的字节数组
  • Commons配置-存储为与键关联的字符串列表
因此,选择可以归结为是否更容易将FooBean转换为字节数组或字符串


Commons配置的另一个优点是不同的后端。我用它在数据库中存储属性。如果您想将对象存储在用户本地计算机以外的其他位置,那么它将是更好的选择。

Commons配置不适合存储复杂的对象结构。您最好使用序列化框架