Почему бы не использовать псевдонимы типов вместо этого? Я ценю, что они не идеальны (то есть они не решают вашу проблему компиляции), но они могут сделать ваш код более понятным без потери производительности?
type Timestamp = Long
type ProductId = Long
Затем вы можете написать методы, которые используют шаблон pimp my library и позволяют JVM использовать escape-анализ для устранения накладных расходов времени выполнения:
class RichTimestamp(self: Timestamp) {
//whatever you want here
}
Обратите внимание, что применяются все обычные предостережения: если вы не очень уверены (поскольку вы, например, занимаетесь программированием со сверхнизкой задержкой), снижение производительности при использовании штучного типа, вероятно, не является проблемой. Я имею дело с системами, обрабатывающими десятки миллионов входов в день без каких-либо проблем!