Я пытаюсь использовать тип, зависящий от типа, с дженериками.В Scala, как я могу ограничить несколько параметров, должен быть тип внутри того же типа?
У меня есть два класса, класс C2 вложен в C1.
case class C1(v1: Int) {
case class C2(v2: Int)
}
И у меня есть два объекта класса С1 здесь:
object O1 extends C1(1)
object O2 extends C1(2)
Я хочу написать метод, которые принимают несколько параметров типа С2. И все эти параметры должны принадлежать одному и тому же объекту C1.
Например:
foo(O1.C2(10), O1.C2(11)) // all the C2 is inside the same O1
foo(O1.C2(10), O2.C2(20)) // not good, will not compile
Я попробовал несколько способов написания такого рода метод, но никто не работает.
Первый:
def print1(p1: C1#C2, p2: C1#C2): Unit = {
println(p1.v2, p2.v2)
}
print1(O1.C2(1111), O2.C2(2222)) // Not requited that p1 & p2 should have the same object of C1
Второй:
def print2(p1: O1.C2, p2: O1.C2): Unit = {
println(p1.v2, p2.v2)
}
print2(O1.C2(1111), O1.C2(1111)) // Can only accept the C2 inside O1
Третий:
def print3[T <: C1#C2](p1: T, p2: T): Unit = {
println(p1.v2, p2.v2)
}
print3(O1.C2(1111), O2.C2(2222)) // The same as the first one.
Последний из них:
// def print2[U <: C1](p1: U.C2, p2: U.C2): Unit = {
// println(p1.v2, p2.v2)
// }
// Not compile, Error: not found: value U
Есть ли в любом случае, что я могу архивировать это?