2013-04-07 2 views
1

Я хочу создать метод, который принимает параметр типа, очевидно без параметров на его конструкторе, и возвращает объект-фиктивный объект, построенный с помощью этого конструктора. В принципе, какой-то заводской шаблон.Создание объекта из параметра типа в Scala

  • Возможно ли это в Скале?
  • Это хорошая идея? Любой лучший образец, если это не так?
  • Есть ли способ достичь этого только во время компиляции (т. Е. Без отражения)? Пример

Код:

trait Model 
class A extends Model 
class B extends Model 

def dummy[T <: Model] = new T // Fails compilation with "class type required but T found" 

dummy[A] // Returns an instance of A 
dummy[B] // Returns an instance of B 

ответ

4

Это может быть сделано с помощью ClassManifest с, которые предназначены для преодоления стиранием:

def dummy[T <: Model : ClassManifest] = classManifest[T].erasure.newInstance 

Как за это время компиляции без отражения, я думаю, что это можно сделать, используя макросы scala 2.10.

+0

Вам нужно загрузить JAR с помощью scala-reflection ?, чтобы использовать манифест класса? На Android, отражение Scala в настоящий момент не очень хорошо работает, поэтому я бы хотел не использовать его ... –

+0

Нет, вам не нужно использовать JAR scala-reflection, чтобы использовать манифесты. –

+0

Хм, я получаю «Не найден: Тип /» при попытке этого ... Какую версию Scala вы используете? –

Смежные вопросы