【问题标题】:Best way to store and access a lot of constants存储和访问大量常量的最佳方式
【发布时间】:2018-01-05 02:36:34
【问题描述】:

例如,在制作游戏时,我想存储很多常量。我还希望很多类能够访问这些常量。存储和访问所有这些值的最佳方式是什么。目前,我只是将最终值存储在一个单独的类中,然后创建一个存储常量的类的实例。要访问这些值,我会执行“objectName.nameOfConstant”。所以我的问题是,它们是存储所有这些常量的正式方式还是更好的方式。

【问题讨论】:

  • Enums 你可能会感兴趣。
  • 不要在实例上存储常量。常量应该是静态的。
  • 谢谢,将研究枚举。还要感谢使用静态的建议,但我不会遇到静态到非静态的引用吗?
  • 属性文件或资源包,常量很少...

标签: java class constants


【解决方案1】:

一种可能的解决方案是拥有一个具有静态属性的类,因此您无需创建实例。例如:

public class Status {

 public static final String ACTIVE = "ACTIVE";
 public static final String INACTIVE = "INACTIVE";}

可以直接调用:Status.ACTIVE 或 Status.INACTIVE

第二种可能的解决方案是使用枚举。

public enum Status {
  ACTIVE, INACTIVE;
}

使用静态字符串很容易,但没有类型检查。例如当你想把常量作为方法输入参数时:

public void process(String input, String status)

使用枚举时

public void process(String input, Status status)

枚举将确保您的输入来自枚举列表。而静态字符串无法检查,所以方法的用户可以在“状态”中放入任何值,并且您需要确保该方法不会在该值出现意外时中断。

【讨论】:

    【解决方案2】:

    您可以考虑使用接口在其中存储常量值。

    起初可能看起来很奇怪,但接口提供了许多有用的默认设置来存储 const 变量,例如

    • 默认的最终值
    • 默认静态和公共访问
    • 不需要类实例

    见下面的代码示例

    public interface OlympicMedal
    {
      String GOLD = "Gold";
      String SILVER = "Silver";
      String BRONZE = "Bronze";
    }
    
    //some other file
    import static xx.OlympicMedal;
    
    public class OlympicAthlete 
    {
      ...
      public static boolean isWinner(String medal) {
        return OlympicMedal.GOLD.equals(medal);
      }
    }
    

    ** 重要提示:你应该以继承方式使用Const接口(见下面的代码),这被称为接口模式,被认为是一个穷人练习

    public class OlympicAthlete implements OlympicMedal  // NOT recommended
    {
       ...
    }
    

    【讨论】:

    • 在接口中存储常量是一个糟糕的设计,应该不惜一切代价避免。接口旨在定义类型/合同,而常量远非如此。
    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2012-10-18
    • 1970-01-01
    • 2018-07-27
    • 2010-10-10
    • 1970-01-01
    相关资源
    最近更新 更多