I want to instantiate a new object with the following classes:
class Test[T : ClassTag](val value : T) extends Serializable private object Test { private var testClass : Class[_] = _ def setTestClass(test : Class[_]) : Unit = { testClass = test } def apply[T : ClassTag](value : T) : Test[T] = { testClass.getConstructors()(0).newInstance(value).asInstanceOf[Test[T]] } } class Subtest[T : ClassTag]( override val value : T, val additional : Integer ) extends Test[T](value) I set the test-class with setTestClass somewhere, that has been loaded with Class.forName from a string. Let say it is "Subtest". I wish to instantiate a new Subtest[String] with - for example the following code:
Test("my random string") // It should return a new Subtest[String] The problem is that newInstance throws java.lang.IllegalArgumentException: wrong number of arguments. I've checked the parameterTypes of the Constructor, and there are two parameter types:
- class java.lang.Object
- interface scala.reflect.ClassTag
Okay. How to supply the ClassTag? What is the problem here? Is there a better approach, workaround for this?
Testfor which you don't know the typeTstatically?.newInstance(arg1, arg2)since this method takes a variable number of arguments.