newInstance с аргументами - PullRequest
3 голосов
/ 20 марта 2011

Есть ли способ «динамически» / рефлексивно / и т. Д. Создать новый экземпляр класса с аргументами в Scala?

Например, что-то вроде:

class C(x: String)
manifest[C].erasure.newInstance("string")

Но это компилируется. (Это также, будьте уверены, используется в контексте, который имеет гораздо больше смысла, чем этот упрощенный пример!)

1 Ответ

12 голосов
/ 20 марта 2011

erasure имеет тип java.lang.Class, поэтому вы можете использовать конструкторы (в любом случае вам не нужен манифест в этом простом случае - вы можете просто использовать classOf[C]). Вместо непосредственного вызова newinstance вы можете сначала найти соответствующий конструктор с методом getConstructor (с соответствующими типами аргументов), а затем просто вызвать newInstance для него:

classOf[C].getConstructor(classOf[String]).newInstance("string")
...