I miei suggerimenti (in ordine decrescente di preferenza):
1) Non farlo . Crea le costanti nella classe effettiva in cui sono più rilevanti. Avere una classe / interfaccia "bag of constants" non sta seguendo le migliori pratiche OO.
Io e tutti gli altri ignoriamo il numero 1 di tanto in tanto. Se hai intenzione di farlo, allora:
2) classe finale con costruttore privato Questo almeno impedirà a chiunque di abusare del tuo "bagaglio di costanti" estendendolo / implementandolo per ottenere un facile accesso alle costanti. (So che hai detto che non l'avresti fatto, ma questo non significa che qualcuno verrà dopo che non lo farai)
3) interfaccia Funzionerà, ma non è mia preferenza a menzionare l'eventuale abuso al punto 2.
In generale, solo perché queste sono costanti non significa che non dovresti ancora applicare loro i normali principi oo. Se nessuno tranne una classe si preoccupa di una costante, dovrebbe essere privato e in quella classe. Se solo ai test interessa una costante, dovrebbe essere in una classe di test, non nel codice di produzione. Se una costante è definita in più posizioni (non solo accidentalmente la stessa), eseguire il refactoring per eliminare la duplicazione. E così via - trattali come faresti con un metodo.