При написании тестов для проверки правильности выбора класса типов где-то внутри я столкнулся с стиранием типа. У меня нет возможности добавить ClassTag
к сигнатуре, если только я не загрязню нетестовую версию трейта, потому что добавление : ClassTag
изменяет сигнатуру метода так, что она больше не является переопределением, например:
trait Foo {
def bar[T: MyTypeClass](t: T): Unit
}
class FooStubImpl extends Foo {
override def bar[T: MyTypeClass: ClassTag](t: T): Unit = {
val ct = classTag[T]
}
}
Это вызывает следующую ошибку компиляции:
Ошибка: (12, 20) метод bar ничего не переопределяет. Примечание: суперклассы класса FooStubImpl содержат следующий не конечный член с именем bar:
override def bar[T](t: T)(implicit evidence$1: MyTypeClass[T]): Unit = { ^
Есть ли другой способ получить во время выполнения информацию о типе параметризованных типов, который не требует ClassTag
?
extends Foo
, хотя в данном случае это не меняет ошибку компилятора. - person 0__   schedule 18.05.2015