Мои предложения (в порядке убывания предпочтений):
1) Не делай этого . Создайте константы в фактическом классе, где они наиболее актуальны. Наличие класса / интерфейса «мешок констант» на самом деле не следует рекомендациям ОО.
Я и все остальные время от времени игнорируем # 1. Если вы собираетесь это сделать, то:
2) final класс с закрытым конструктором Это, по крайней мере, предотвратит злоупотребление вашей «сумкой констант», расширив / реализовав ее, чтобы получить легкий доступ к константам. (Я знаю, ты сказал, что не сделаешь этого, но это не значит, что кто-то придет после тебя)
3) interface Это будет работать, но я не предпочитаю упоминать о возможном злоупотреблении в # 2.
В общем, только потому, что это константы, не означает, что вы все равно не должны применять к ним нормальные принципы. Если никто, кроме класса, не заботится о константе - она должна быть частной и в этом классе. Если только тесты заботятся о константе - это должен быть тестовый класс, а не рабочий код. Если константа определена в нескольких местах (а не случайно одна и та же) - рефакторинг для устранения дублирования. И так далее - относитесь к ним так же, как к методу.