【问题标题】:Java + Eclipse: Best way to store constants and tune them at runtimeJava + Eclipse:存储常量并在运行时调整它们的最佳方式
【发布时间】:2013-10-10 15:57:03
【问题描述】:

我遇到了一个有趣的问题。我正在用 Java 开发游戏,我想知道存储常量的最佳方式。我想达到几点:

  • 类特定(常量包含在使用或至少分为类别的类型中)
  • 常量的运行时调整(简单的static final 常量由于编译时常量表而无法工作)。
  • 没有常量名称的字符串文字。我想使用我的 IDE 为我完成常量名称。
  • 如果可能的话,带有键/值对的外部文件会很好。当引入常量时,我​​将在代码中提供一个默认值,它可能会被存储在外部文件中的值覆盖。可以在启动时或通过控制台命令触发更新(我已经有控制台)

工作流程应该是这样的:我正在调试正在运行的应用程序。我将更改一些常量(在代码中或在外部文件中),触发更新(eclipse 热替换或应用内操作),然后常量立即更改。

任何建议将不胜感激。

【问题讨论】:

  • 您似乎不清楚常量的概念。您在考虑全局参数或属性吗?
  • 你是对的。更多的是参数而不是常数。但是当它调整到正确的值时,它会变成一个常数。
  • 如果它可以改变它不是一个常数。重新考虑你的措辞——你只会让别人感到困惑。

标签: java eclipse debugging constants


【解决方案1】:

您可能想看看为处理本地化而设计的一些方法,并根据您的需要进行调整。

这是蓝宝石的...

http://git.eclipse.org/c/sapphire/org.eclipse.sapphire.git/tree/plugins/org.eclipse.sapphire.modeling/src/org/eclipse/sapphire/LocalizableText.java

基本思想是您有一些带有注释的静态(但不是最终字段)来提供默认/初始值。您在类初始化期间执行一个方法,该方法通过首先查看属性文件并返回注解来填充这些静态数据。

看起来像这样:

public class NumericRangeValidationService
{
    @Text( "{0} is smaller than the minimum allowed value ({1})" )
    private static LocalizableText smallerThanMinimumMessage;

    @Text( "{0} is larger than the maximum allowed value ({1})" )
    private static LocalizableText largerThanMaxiumMessage;

    static
    {
        LocalizableText.init( NumericRangeValidationService.class );
    }

    ...
}

【讨论】:

  • 谢谢。这是我现在正在尝试的一种概念。这种方法的唯一缺陷是可能会忘记静态初始化部分。我不确定,但可能没有办法避免它。太糟糕了,没有注释构造函数。
【解决方案2】:

在大型项目中存储常量的最佳方法是创建一个单独的文件,其名称具有常量,例如:“StackOverflowConstants.java”

将此文件中的常量用作:-

public static final String USERNAME = "STACK";

【讨论】:

  • 请阅读 OP 问题的这一部分:No string literals for constant names
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多