Ответ от @jwvh на месте. Здесь я добавлю решение только в том случае, если вы хотите решить проблему безопасного преобразования Int
в A
в whatever
, не зная, что такое A
. Это, конечно, возможно, только если вы предоставите способ построить конкретный A
из Int
. Мы можем сделать это с помощью класса типов:
trait BuildableFromInt[+A] {
def fromInt(i: Int): A
}
Теперь вам нужно только неявно предоставить BuildableFromInt
для любого типа A
, который вы sh будете использовать в whatever
:
object BuildableFromInt {
implicit val longFromInt: BuildableFromInt[Long] = Long.box(_)
}
и теперь определите, что принимать только совместимые типы A
:
def whatever[A : BuildableFromInt](x: A): List[A] = {
val two = implicitly[BuildableFromInt[A]].fromInt(2)
// Use two like any other "A"
// ...
}
Теперь все, что можно использовать с любым типом, для которого доступен BuildableFromInt
.