Есть ли способ в Scala создать общий экземпляр без примера? - PullRequest
5 голосов
/ 20 августа 2010

Я играл с созданием универсальной фабрики следующим образом:

trait Factory[T] { def createInstance():T = new T() }
val dateFactory = new Factory[Date](){}
val myDate = dateFactory.createInstance()

'new T ()' не компилируется, так как T неопределен до времени выполнения.Я знаю, что могу заставить его работать, передав экземпляр класса какому-либо методу (т. Е. CreateInstance (classOf [Date]))

Я спрашиваю, есть ли какая-нибудь магия самоанализа, которая может заменить 'new T () ', чтобы я мог создать свою супер простую фабрику?

1 Ответ

10 голосов
/ 21 августа 2010

Это будет работать:

class Factory[T : ClassManifest] {
  def
  createInstance(): T =
    (implicitly[ClassManifest[T]]).erasure.newInstance.asInstanceOf[T]
}

, если класс, для которого он создан, имеет конструктор по умолчанию (zero-arg).

...