- Исправленное сообщение -
Синтаксис [B <% A]
фактически связывает новый тип B
.Так что
class Foo[A, String <% A]
эквивалентно
class Foo[A, String](implicit $conv: String => A)
, где String
- параметр произвольного типа, а не класс, о котором вы думаете.
Я думаю, чтоИменованное неявное преобразование является, вероятно, вашим лучшим вариантом,
class Foo[A](implicit conv: String => A)
, где теперь тип String
не затенен.
Сводка: границы просмотра полезны в качестве преобразований из введенный параметр типа, а не до параметр типа.