У меня есть метод без параметров значения, который я хочу перегрузить другим методом, использующим конструктор более высокого типа. Я также хочу использовать параметр конструктора типа в теле метода. Я также хочу захватить тег класса. Это то, что я думаю, должно быть возможно:
trait SomeContainer[+A]
trait Foo[+A]
class SomeClass {
// The simple variant
def method[T <: AnyRef]: Foo[T]
// Now the overloaded higher-kinded variant
def method[F[T <: AnyRef : Manifest] <: SomeContainer[T]]: Foo[T] = {
val classTag = manifest[T]
// Do something with it
}
}
Однако у меня вообще нет доступа к T
здесь. Цель здесь состоит в том, чтобы заставить метод более высокого типа перегрузить метод не более высокого типа def method[T <: AnyRef]: Foo[T]
. Я достиг ограничения языка? Является ли сигнатура метода не более высокого типа слишком открытой, что делает невозможным для компилятора устранение неоднозначности одного от другого? Есть ли лучший более идиоматический подход к такому шаблону перегрузки параметров типа?