【发布时间】:2012-04-24 00:30:58
【问题描述】:
tl;博士:
我正在寻找枚举特定对象的变量的最佳模式,以及这些变量可能采用的范围。然后我想根据特定的变量设置来配置对象。
长版:
我正在检查一些旧代码,试图清理我过去制作的一些丑陋的黑客行为。我有一个不错的机器学习和数据挖掘库。在这个库中有各种统计模型(和其他组件),可以通过给定足够数据(称为训练)的数学优化来学习它们自己的许多参数。但是,还有其他参数(超参数)在训练之前设置为输入之一。可以通过选择许多有效设置、为每个设置构建模型并选择获胜者来“调整”超参数。可以在此过程中使用递归来调整几个超参数。
问题:
在我看来,优雅地处理超参数(更一般地,选项)的有效系统所需的组件是:
- 枚举所有不同选项的静态变量 不同类型(枚举、浮点数、布尔值等)、有效值范围、 等等。这些也可以存储每个选项的默认值。
- 接受配置并使用此选项设置构建对象的构造函数。
- 很高兴拥有:例如,能够从 .properties、gnu cli 或 yaml 进行“配置”。
我遇到的困难:
这里的主要困难之一似乎是 1)。 Java 没有任何真正的机制来支持静态抽象变量,以防止强制实现“可配置”接口的给定类存储它们自己的默认配置实现。有没有解决这个问题的好方法?
父类的默认配置应该传递给子类。
我可以创建一个采用配置对象的构造函数,但是将其扩展为也采用此配置的(cli、yaml、.properties)表现形式有点棘手。
我很想听听 stackoverflow 可以提供的解决这个问题的任何建议。我一直在考虑这个问题,目前我所拥有的只是丑陋的黑客,而不是漂亮的代码。
【问题讨论】:
-
也许类似于 Spring 框架,您可以使用“beans”使用 xml 文件初始化对象。
标签: java oop design-patterns configuration data-mining