Enums VS Classes VS Interfaces

后端 未结 3 1307
梦如初夏
梦如初夏 2020-12-09 10:42

I have been reading a lot of posts on this site regarding the usage of constants.

Question: When should I use Enums for constants, vs using classes or interfaces. <

相关标签:
3条回答
  • 2020-12-09 11:05

    It sounds like almost everything you've listed for both numbers 1 and 2 belong in configuration files or database tables.

    Do you want to re-compile code when your employee's get a raise or a page name changes?

    Unless there is a compelling reason everything else that is constant should be modeled as an enum. This way you realize the benefits of fast object equality comparisons and you avoid problems associated String constants.

    The scope of those enums however is application specific. If the enumeration is only used by a class that it should be a private enum. If it is shared by multiple classes then it should be in its own class definition file.

    0 讨论(0)
  • 2020-12-09 11:11
    1. Global constants used by different projects: Enum
      Better to use Enum over public static final members in a class. More clean and easy to understand I guess.

    2. Object specific constants: public static final members in Class. Because, they are needed only within the scope of the object, then no need to created a new Enum for that.

    Nice read

    Update (fixed broken link):

    1. Making the Most of Java 5.0: Enum Tricks
    2. Making the Most of Java 5.0: Enum Example
    0 讨论(0)
  • 2020-12-09 11:16

    Global constants as you put it should actually be in a properties file as it allows each application to configure them individually without a code modification. For object specific constants my general rule of thumb on Enum versus static final I typically lean towards how many elements there are to have and how related those elements are. If there is a big relation between them such as Suits in a deck of Cards then I would go for the enum. If it is default age for a user, then this becomes a final as there is no purpose to making it an enum as it would not need to be referenced in many areas. These are just some thoughts on each of the ways I have approached it.

    0 讨论(0)
提交回复
热议问题