在编译期间自动更改Java中的“const”值的最简单方法

时间:2010-04-08 02:07:12

标签: java

这是一个与我的单一任务相对应的问题,所以我很遗憾地说我不能在短时间内采用以下任何一种最佳做法 - 你知道 - 明天将分配:(

link to Best way to alter const in Java on StackOverflow

基本上我唯一的任务(我希望如此)就是性能调整。我在我的单类代理源代码中有一堆预定义的“const”值,如下所示:

// values used as "const"s
private static  long FT_THRESHOLD               = 400;
private static  long FT_THRESHOLD_MARGIN          = 50;
private static  long FT_SMOOTH_PRICE_IDICATOR   = 20;
private static  long FT_BUY_PRICE_MODIFIER     = 0;
private static  long FT_LAST_ROUNDS_STARTTIME   = 90;
private static  long FT_AMOUNT_ADJUST_MODIFIER    = 5;
private static  long FT_HISTORY_PIRCES_LENGTH   = 10;
private static  long FT_TRACK_DURATION          = 5;
private static  int  MAX_BED_BID_NUM_PER_AUC      = 12;

我绝对可以手动更改这些值,然后编译代码以便再次使用它。但是,彻底“统计分析”的执行时间通常需要超过2000次执行,这通常会持续超过半小时在我自己的笔记本电脑上...

所以我希望有一种方法可以使用其他方法来改变值,而不是挖掘源代码来改变那里的“const”值,所以我可以自动将编译后的代码分发给其他人的PC,让他们运行统计分析代替。

自动值调整的另一个原因是我可以尝试使用自己的代理通过选择不同的“const”值来打败自己。虽然我的值来自以前的历史和统计结果,但它们远非最优化的值。

我希望有一个简单的方法,所以我可以很快采用它,以便今晚好好睡一觉,而电脑为我做的一切......:)

有关此类内容的任何提示吗?任何建议都受到欢迎和赞赏。

3 个答案:

答案 0 :(得分:4)

忘记常数,它们不是你想要的。使用从磁盘上的文件中读取的Properties文件。如果我明天必须这样做,那就是我会做的。您将不得不使用类路径来完成这项工作,我假设您已经在Java中使用了文件IO。

答案 1 :(得分:2)

正如其他人所建议的那样,读取属性文件将是一种相对快速简便的方法。

如果您尝试在同一JVM中针对其自身的不同版本运行该程序,则您的变量不能是静态的。

假设您将其重新实现为属性文件,这里有一些参考资料:

属性文件通常如下所示:

#This is a .properties file
FT_THRESHOLD=400
FT_THRESHOLD_MARGIN=50
etc...

从文件中读取属性非常简单,只需从文件中创建一个fileInputStream,然后在java.util.Properties类上调用load()方法。

public void readProperties(File propertiesFile)
{
    Properties props = new Properties();
    props.load(new FileInputStream(propertiesFile));
    FT_THRESHOLD = Long.parseLong(props.getProperty("FT_THRESHOLD"));
    FT_TRACK_DURATION = Long.parseLong(props.getProperty("FT_TRACK_DURATION"));
    ...etc
}

希望有所帮助!

答案 2 :(得分:0)

您可以将读取Properties文件的方法的返回值赋给静态最终变量。