In order to avoid Java exceptions I’m using Scala’s exception handling class.
However, when compiling the following snippet:
import scala.util.control.Exception._
val cls = classManifest[T].erasure
// Invoke special constructor if it's available. Otherwise use default constructor.
allCatch opt cls.getConstructor(classOf[Project]) match {
case Some(con) =>
con.newInstance(project) // use constructor with one Project param
case None =>
cls.newInstance // just use default constructor
};
I receive the following error:
error: type mismatch;
[scalac] found : java.lang.reflect.Constructor[_]
[scalac] required: java.lang.reflect.Constructor[_$1(in method init)] where
type _$1(in method init)
[scalac] allCatch opt cls.getConstructor(classOf[Project]) match {
[scalac] ^
[scalac] one error found
What’s going on here and how can I fix it?
The type inference scheme has gotten confused by the types available–specifically, by the type of cls. If we write generic code:
then it works perfectly okay. But you’re probably doing something else–I can’t tell what because you didn’t provide the code–and this results in a mismatch between the expected and actual types.