避免将 java 属性 (String) 多次转换为 Integer Double

Avoid multiple castings of java properties (String) to Integer Double

我正在寻找一种方法来减少属性从 java 属性到数字的转换,例如 Integer、Double,如果可能的话甚至 class 可以直接转换 [=12] =].

假设我有多个属性并且必须多次通过实例化并且我希望使用只解析和转换一次的 class。

Properties mogaProps = parseProperties("mogabcpu/moga");
for (int i=0;i<10000;i++){
    NSGA2Runner GA = new NSGA2Runner(Integer.valueOf(mogaProps.getProperty(
            "NUMINITIALCHROMOSSOMES")), Integer.valueOf(mogaProps.getProperty(
            "NUMCHROMOSOMES")),
            Double.valueOf(mogaProps.getProperty(
                    "MUTATIONRATE")), Double.valueOf(mogaProps.getProperty(
            "CROSSOVERRATE")),
            parseStringTo1DArray(mogaProps.getProperty("NUMITERATIONS"))
}

是否有更好的替代方法来避免使用自定义 class 来专门保存所有潜在的不同数据类型属性?

我找到了 this 但是我找不到这个配置 Class 依赖项。

谢谢

I am looking for a way to reduce the castings of properties

你是parsing, not casting.valueOf 调用通过解释文本中的含义(解析)而不是重塑现有值(转换)来创建新值。但在你的问题的背景下并不是一个有用的区别,仅供参考。

Say I have multiple properties and must pass for instantiation many times and I wish to use a class that parses and casts only once.

如果属性在运行时没有改变,只需实例化您的配置对象(在您的情况下是 NSGA2Runner 对象,您的 GA)一次。将该对象传递给需要该信息的其他方法和对象。

在带有 for 循环的示例代码中,如果您的实际代码只处理一次属性然后使用该数据 10,000 次,请将 GA = 行移至循环外。

顺便说一句,如果您只分配一个对象一次,请将 GA 标记为 final。该关键字阻止任何无意中使该变量指向任何其他对象的尝试。

reduce the castings of properties from java Properties to Numeric such as Integer, Double

您的数据以文本形式存储在 Properties 中。您需要将该数据作为数字而不是文本来处理。因此,无法绕过将文本解析为数字的繁琐工作。

我不知道你为什么关心这个。也许性能是你关心的?这种解析既快速又容易。除非您经常处理数百万个此类值,否则不会对性能产生重大影响。做一些微观基准测试来亲眼看看。

Is there a better alternative avoiding the use of a custom class to specifically hold all potential different data types attributes?

定义 class 是在像 Java.

这样的面向对象语言中收集相关信息部分的合适方法

如果您的数据是只读的,那么您可能想要使用 Java 16 及更高版本中的 records 功能。记录是编写 class 的一种简短方式,其主要目的是透明且不可变地传递数据。您只需要声明每个成员字段的类型和名称。编译器隐式创建构造函数、getter、equals & hashCodetoString.

public record NSGA2Runner( int numberOfInitialChromosomes , int numberOfChromosomes , double mutationRate , double crossoverRate , int[] numberOfIterations ) {}