EasyConfiguration icon indicating copy to clipboard operation
EasyConfiguration copied to clipboard

feat(holder): 多实例Holder支持

Open RedCarl opened this issue 4 months ago • 5 comments

支持存储多个json 和 yml 数据,类似于存储玩家数据,使用uuid进行命名文件名字

/data/xxx.json

RedCarl avatar Aug 21 '25 00:08 RedCarl

不知道能否用不同的ConfigurationHolder去initialize同一个已经写好的Configuration类?

Meteor2333 avatar Aug 21 '25 13:08 Meteor2333

不知道能否用不同的ConfigurationHolder去initialize同一个已经写好的Configuration类?

看了一下源码 这样应该不行 因为配置项字段在初始化时就写入了唯一的Holder 具体代码在: https://github.com/CarmJos/configured/blob/47fd058f449db498b6e6b3f7097bc6477bd74643/core/src/main/java/cc/carm/lib/configuration/value/ValueManifest.java#L68-L73

Meteor2333 avatar Aug 21 '25 14:08 Meteor2333

不知道能否用不同的ConfigurationHolder去initialize同一个已经写好的Configuration类?

现在其实支持,只不过比较麻烦。只需要编写一个实体类即可,例如


public class SomeConfig extends Configuration {
    

    // 注意,这里不能设为静态,而要作为内部对象。
    public ConfiguredValue<String> VALS = ...;

}

随后,对于不同的文件,创建多个holder,并令每个holder初始化单个实例。



void init(){

   for (File file: files){

       ConfigurationHolder<?> holder = ...;
       SomeConfig config = new SomeConfig();
       holder.initialize(config);

       // 记得吧config存起来,用于读取
   }


}

由于使用过于繁琐,我正在考虑编写一个更快捷、更方便的组合holder,以实现类似情景下的快速开发。

CarmJos avatar Aug 21 '25 15:08 CarmJos

不知道能否用不同的ConfigurationHolder去initialize同一个已经写好的Configuration类?

现在其实支持,只不过比较麻烦。只需要编写一个实体类即可,例如

public class SomeConfig extends Configuration {

// 注意,这里不能设为静态,而要作为内部对象。
public ConfiguredValue<String> VALS = ...;

} 随后,对于不同的文件,创建多个holder,并令每个holder初始化单个实例。

void init(){

for (File file: files){

   ConfigurationHolder<?> holder = ...;
   SomeConfig config = new SomeConfig();
   holder.initialize(config);

   // 记得吧config存起来,用于读取

}

} 由于使用过于繁琐,我正在考虑编写一个更快捷、更方便的组合holder,以实现类似情景下的快速开发。

但是如果通过实例初始化就不能加载内部类了

Meteor2333 avatar Aug 22 '25 02:08 Meteor2333

不知道能否用不同的ConfigurationHolder去initialize同一个已经写好的Configuration类?

现在其实支持,只不过比较麻烦。只需要编写一个实体类即可,例如 public class SomeConfig extends Configuration {

// 注意,这里不能设为静态,而要作为内部对象。
public ConfiguredValue<String> VALS = ...;

} 随后,对于不同的文件,创建多个holder,并令每个holder初始化单个实例。 void init(){ for (File file: files){

   ConfigurationHolder<?> holder = ...;
   SomeConfig config = new SomeConfig();
   holder.initialize(config);

   // 记得吧config存起来,用于读取

} } 由于使用过于繁琐,我正在考虑编写一个更快捷、更方便的组合holder,以实现类似情景下的快速开发。

但是如果通过实例初始化就不能加载内部类了

public class SomeConfig extends Configuration {

 // 注意,这里不能设为静态,而要作为内部对象。
 public ConfiguredValue<String> VALS = ...;

  // 同时,若需要内部类,只需要继续添加实例即可
 public OtherConfig OTHERS = new OtherConfig();

}

CarmJos avatar Aug 22 '25 07:08 CarmJos