У меня есть пример код, как это:Scala: как напечатать внутри класса с использованием типа параметризации
trait X{
val a=1;
val b=2;
}
case class Y(override val a:Int, override val b:Int) extends X{
def sum(c:Int)=a+b+c
}
case class Z(override val a:Int, override val b:Int) extends X{
def sum(c:Int)=a+b+c+10
}
object Test{
def main(args: Array[String]) {
val z = Z(1, 2)
val y = Y(3, 4)
println (y.sum(5))
MyTest[Z].myprint(z) //error here
}
}
class MyTest[A] {
def myPrint(z: A): Unit =
if (z.isInstanceOf[A]) {
val c = z.asInstanceOf[A]
println(c.sum(4)) //error here
}
}
То, что я пытаюсь сделать, это создать параметризованный класс MyTest с функцией, которая будет печатать функцию sum
класса, принятого как параметр. Я получаю две ошибки:
- не может разрешить символ MyTest
- Я не могу писать
c.sum()
, потому что очевидно, что компилятор не имеет никакой информации о том, какой класс может быть передан в А.
Обратите внимание, что если я положу метод myPrint внутри Test, который, во всяком случае, лучший дизайн, у меня все еще есть вторая проблема.
Что может быть для этого решением?
правый примерно аргумент вещь. редактирования. – rivu
Я не прав о других вещах? Вам нужно больше объяснений или, может быть, я неправильно понял вашу проблему? –
Нет, нет, вы правы. Я просто занимаю время, чтобы проверить вещи :) – rivu