I've noticed that more and more developers are manually replicating enum values to match external API values. For example, when defining an enum for weekdays, they'll have a constructor that takes a string representation of the weekday. This seems to add unnecessary complexity since it replicates what enums can already do by default. If the API contract is under our control, can you explain why we should add this extra code? Isn't it just noise without real benefit? Also, I'd love to hear thoughts about formatting conventions, such as why we should prefer uppercase over lowercase for enum names. Should we stick with conventions even if it complicates our code unnecessarily?
5 Answers
Using this double-value pattern can sometimes be beneficial if you're primarily using the enum for display purposes or need a reverse lookup. The idea is that maintaining a consistent method of conversion can simplify handling null or non-standard values, avoiding potential exceptions in your code.
Some argue that some enums should encode more than just the names. When the underlying string representations differ—think of an external code or database value that needs constant representation—having those strings in the enum can make sense. But if it's always the same and just looks like boilerplate, then that’s questionable. Let's focus on creating cleaner, more readable code.
The pattern can be overused when the string representation just duplicates the enum name. If your API calls merely reflect enum values, then duplicating string values is unnecessary. For simplicity, stick to just defining the enum clearly and add conversion methods where complexity really arises.
As an Android developer, it's vital to decouple your private API from your public one. By maintaining this separation, should you decide to obfuscate your code (like with R8 or ProGuard), it helps safeguard your API from breaking. Replicating these string values, even if they seem redundant, ensures you have a level of flexibility if your API might change later.
Using consistent naming conventions in code helps everyone recognize patterns quickly. For instance, using UPPER_SNAKE_CASE for constants like enum names allows developers to immediately know they’re dealing with constants. This consistency simplifies reading and reduces cognitive load when navigating through the codebase. So while it may seem redundant at times, sticking to these conventions aids clarity for the entire team.

Related Questions
How To: Running Codex CLI on Windows with Azure OpenAI
Set Wordpress Featured Image Using Javascript
How To Fix PHP Random Being The Same
Why no WebP Support with Wordpress
Replace Wordpress Cron With Linux Cron
Customize Yoast Canonical URL Programmatically