Reputation: 64207
After switching to Scala 2.10 I get tons of warnings:
reflective access of structural type member method ... should be enabled by making the implicit value language.reflectiveCalls visible
What does it mean?
Upvotes: 17
Views: 5768
Reputation: 11
I ran into this warning with a function I was using to divide an Option[Double or Long]
by 100:
def safeDivideBy100[T <: AnyVal { def toDouble: Double }](number: Option[T]): Option[Double] =
number match {
case None => None
case Some(x) => Some(x.toDouble / 100)
}
Fixing it simply required adding to the top of the file:
import scala.language.reflectiveCalls
Upvotes: 1
Reputation: 13048
The warning actually tells where to look in the documentation for an explanation:
Test.scala:9: warning: reflective access of structural type member method y should be enabled
by making the implicit value language.reflectiveCalls visible.
This can be achieved by adding the import clause 'import scala.language.reflectiveCalls'
or by setting the compiler option -language:reflectiveCalls.
See the Scala docs for value scala.language.reflectiveCalls for a discussion
why the feature should be explicitly enabled.
Referenced Scaladoc entry (be sure to click the |> arrow to the left to expand the documentation entry).
Upvotes: 18
Reputation: 31
From Scala Docs:
Why control it? Reflection is not available on all platforms. Popular tools such as ProGuard have problems dealing with it. Even where reflection is available, reflective dispatch can lead to surprising performance degradations.
Think about this code that uses an anonymous subclass:
class Student(val id:Int)
val specialStudent = new Student(0) {
val greeting = "I am a special student with id " + id // Warning: id can be obfuscated
}
Upvotes: 3