2016-05-25 3 views
3

Я пытаюсь написать некоторый Scala классы«Нет Manifest для типа» ошибка

abstract class A { var a : Int = _} 
class B[T] extends A { var b : T = _ } 
class C[T] extends A { var c : T = _ } 
class Abc[T : Manifest] { 
    var array : Array[T] = _ 
    def this(capacity : Int, f : Unit => T) = { 
     this() 
     array = new Array[T](capacity) 
     for(i <- 0 until capacity) 
      array(i) = f() 
    } 
} 

class Xyz[T] { 
    var m : Abc[C[T]] = _; 
    def this(capacity : Int) = { 
    this(); 
    m = new Abc[C[T]](capacity, Unit => { new C[T]() }) 
    } 
} 

var xyz = new Xyz[Int](10) 

Но я получил:

error: No Manifest available for C[T]. 
     class Xyz[T] { var m : Abc[C[T]] = _; def this(capacity : Int) = { this(); m = new Abc[C[T]](capacity, Unit => { new C[T]() })}} 
                        ^

Насколько я понимаю, что нужно установить неявный манифест аргумента в пользу лямбда-функция

Unit => { new C[T]() }) 

Но как я могу это сделать? Или я совершенно не прав?

ответ

6

Вам просто нужно носить манифест всего пути от вершины, где известен типа:

class Xyz[T : Manifest] { ... 

должен это сделать.