лучший способ сделать это в идеологической скале - это использовать имплициты с эффектом класса типов.Это используется для упорядоченного признака
def max[A <% Ordered[A]](a:A,b:A);
означает то же самое, что и:
def max[A](a:A,b:A)(implicit orderer: T => Ordered[A]);
Это говорит о том, что вы можете использовать каждый тип A, если он может быть обработан как упорядоченный [A].это имеет несколько преимуществ, которых у вас нет с интерфейсом / наследованием Java
Вы можете добавить неявное упорядоченное определение к существующему типу.Вы не можете сделать это с наследованием.
Вы можете иметь несколько реализаций Ordered для одного Типа!Это даже более гибко, чем классы типов в Haskell, которые допускают только один экземпляр для каждого типа.
В заключение подразумевается, что значения скаляров, используемые вместе с обобщениями, дают очень гибкий подход для определения ограничений на типы.1019 *
То же самое и с cloneable / serializable.
Возможно, вы захотите взглянуть на библиотеку scalaz, которая добавляет классы типов haskell, такие как Functor, Applicative и Monad, и предлагает богатый наборподразумевает, что эта концепция также может обогатить стандартную библиотеку.