Mes suggestions (par ordre décroissant de préférence) :
1) Ne le faites pas . Créez les constantes dans la classe réelle, là où elles sont le plus pertinentes. Avoir une classe/interface "sac de constantes" n'est pas vraiment conforme aux meilleures pratiques de l'OO.
Comme tout le monde, j'ignore le numéro 1 de temps en temps. Si c'est ce que vous faites, alors.. :
2) classe finale avec constructeur privé Cela empêchera au moins quiconque d'abuser de votre "sac de constantes" en l'étendant ou en l'implémentant pour obtenir un accès facile aux constantes. (Je sais que vous avez dit que vous ne feriez pas cela - mais cela ne veut pas dire que quelqu'un qui viendra après vous ne le fera pas).
3) interface Cela fonctionnera, mais ce n'est pas ce que je préfère, compte tenu des abus possibles mentionnés au point 2.
En général, ce n'est pas parce qu'il s'agit de constantes qu'il ne faut pas leur appliquer les principes normaux de l'oo. Si une constante n'intéresse qu'une seule classe, elle doit être privée et appartenir à cette classe. Si seuls les tests s'intéressent à une constante, elle doit se trouver dans une classe de test, et non dans le code de production. Si une constante est définie à plusieurs endroits (et pas seulement accidentellement au même endroit), il faut la remanier pour éliminer la duplication. Et ainsi de suite - traitez-les comme vous le feriez pour une méthode.