dev
dev

Reputation: 11319

Properties or Enums or static final

When it comes to declare predefined constants in a name-value pair, I have been randomly choosing between 'java.util.Properties', 'enums' or a separate class with 'public static final' values.

For future reference, I need some guidelines over which approach to take.

Thanks!

Upvotes: 4

Views: 4717

Answers (4)

sumit dugar
sumit dugar

Reputation: 121

Use Enums when your set of constants are fixed and not expected to change often. If it often changes then its difficult to maintain backward compatibility with your previous versions. If in a client server architecture both have different versions of some Enum. E.g

Server : public enum Priority{ HIGH,LOW,MEDIUM,AVERAGE}

Client : public enum Priority{ HIGH,LOW,MEDIUM}

Let's say if server sends Priority.AVERAGE to client then the client will throw exception.

Upvotes: 0

user949300
user949300

Reputation: 15729

One more thing to consider - will these Strings change in different versions? i.e. might you have a French version, a Chinese version, an "advanced" version? If so, Properties / ResourceBundles etc. are the way to go.

Upvotes: 0

Gomoku7
Gomoku7

Reputation: 1372

It all depends of your constant lifecycle. Constant are by definition something that do not move. Choosing the right methods will be a question of the likely to change and the repackaging need.

  • If you're really sure, it wont move ever : static final is the way to go. Pi, mathematical constants, things like that are a good example.

  • If you think there is a potential change but need the ease of code manipulation and do not fear of ascendant compatibility, enums is ok. I did that for error code some time ago.

  • If you think there is a potential change but you don't want this change to impact your code, properties (with resource bundle) is the better choice. Labels (translations), inital settings, etc are also a good example.

Upvotes: 4

Milad Naseri
Milad Naseri

Reputation: 4118

static final fields are used when you cannot form a definite set of closed options from which you can choose the state of a variable. On the contrary, when you can, you always use enums.

Now, when you want to keep a dictionary of key-values, regardless of their nature, it's time to use a Properties type object or sometimes a Map.

Upvotes: 2

Related Questions