Я заметил, что tuple.productIterator
всегда возвращает Iterator[Any]
заданное, если невозможно установить несколько нижних границ (так что это может быть Итератор самого низкого общего супер-типа).
Я попробовал и немного искал, но нашел только этот вопрос для нескольких верхних границ.
Это мой тест о том, как определить тип итератора:
def f[A,B](a:A, b:B) = List(a,b)
// return type is List[Any]
def f[A,B, T >: A "and" T >: B](a:A, b:B) = List[T](a,b)
// doesn't compile, but
// f(1, true) should give a List[AnyVal] and
// f("x", "y") a List[String]
Является ли это ограничением JVM?
Редактировать: Вот несколько больший пример, который, по-видимому, не может быть разрешен с использованием подхода IttayD, когда T должен быть определен в методе:
class Foo[A, B](a: A, b: B) {
def f[T >: A] = List[T](a) // works
def g[T >: A "and" T >: B] = List[T](a) // doesn't work
}