Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建一个包含大量静态字段的Constants类可以吗?_Java_Oop_Class_Constants - Fatal编程技术网

Java 创建一个包含大量静态字段的Constants类可以吗?

Java 创建一个包含大量静态字段的Constants类可以吗?,java,oop,class,constants,Java,Oop,Class,Constants,假设我有一个constants类,包含200多个静态字段: class AnimalConstants { static final int AARDVARK = 1; static final int ANTELOPE = 2; static final int BEAR = 3; ... ... static final int ZEBRA = 200; } 有人能解释一下使用这些课程是否会对性能和记忆力产生负面影响吗 如果将类更改为接口(例如SwingConst

假设我有一个constants类,包含200多个静态字段:

class AnimalConstants {
  static final int AARDVARK = 1;
  static final int ANTELOPE = 2;
  static final int BEAR = 3;
  ...
  ...
  static final int ZEBRA = 200;
}
  • 有人能解释一下使用这些课程是否会对性能和记忆力产生负面影响吗
  • 如果将类更改为接口(例如SwingConstants)并由某些类实现,会更好还是更糟
  • 如果我将常量实现为枚举类,会更好还是更糟

当然
enum
实现比一堆
int
常量更繁琐,但是使用
enum

  • 您不需要硬编码动物的实际值(在您的情况下),这些值以后可能会更改
  • 您不需要硬编码动物的总数,您可以简单地遍历所有动物
  • 正确理解带有此枚举参数的方法(
    foo(动物)
    优于
    foo(int-Animal)
  • 您可以在以后向
    enum
    值添加其他功能,例如内部值
    isMammal

  • 我不认为影响是性能或记忆

    我认为这与代码的可读性、保持常量接近使用位置以及对问题的基本理解有关

    我更喜欢在更接近使用它们的地方声明常量。我相信这样更容易理解

    如果你声称数字200+的真实常数真的相关,我会感到惊讶。如果它们真的相关,它们就属于一个地方。如果不是的话,我会说应该把它们分成更小的碎片,并在离使用它们的地方更近的地方申报

    我敢打赌,如果知道的话,会有比你的人为例子更多的背景改变回答

    当然,枚举很好。但是请先看我的其他评论。

    对于您的类型变量(动物类型),我建议您使用枚举器而不是类。使用它的变量的数量应该不会对性能造成问题,因为您只使用int原语。如果任何一个var都是一个类,那么问题就会出现,因为维护它们的结构需要更多的内存。我希望能澄清你的疑问(对不起,我的英语不好,我有点生疏了)

    如果将类更改为接口(例如SwingConstants)并由某些类实现,会更好还是更糟

    -->那将是一个巨大的挑战。如果我们对常量使用接口,并且它是由所有类实现的,但是如果您正在开发一个API,这就像您正在公开您的实现细节一样。上面的wiki链接很好地解释了这一点

    在这两种方法(接口或类)中,我建议使用final类,创建常量,并在必要时对常量执行
    静态导入

    如果我将常量实现为枚举类,会更好还是更糟


    -->对于enum,这将是最好的方法。

    更改已编译到另一个类中的任何值可能需要完整构建


    附录:有关更全面的检查,请参阅。

    是的,可以创建大量常量。很难讨论负面影响,因为我们不知道任何替代方案,因为我们没有您的功能需求

    但是请确保编译器的编写与人类编写的代码配合良好。拥有一堆字段可能没问题

    我觉得常量非常好,因为它可以用在开关的情况下,因为JDK7,您可以比较==和变量名可以提供信息


    enum还能更好吗?是的,它可以。探索enum的功能,看看是否有什么吸引你的地方

    看看你的用例,也许你应该研究一下
    enum
    s,在你首先编写了一个易于维护的版本,并分析了你的应用程序以确定你有性能问题之前,你甚至不需要考虑性能。即使你有20年的性能调整系统经验,你仍然应该测量,而不是猜测。所以,我不应该太担心使用大常数?我在项目中使用常量和枚举。大约80%-20%。“所以我不应该太担心”-你从哪里得到的?是的,我想你应该担心。我不相信你的用例需要200个常量。事实上,我正在做一个交易API项目,这个项目引发了我的问题帖子。animal常量只是一个抽象,可以帮助我解决这个问题。200+常数是交易符号吗?它们属于数据库,而不是枚举或接口。