What does “reflective access of structural type member method should be enabled…” warning mean in Scala?

后端 未结 2 545
旧时难觅i
旧时难觅i 2021-01-04 01:59

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

相关标签:
2条回答
  • 2021-01-04 02:26

    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).

    0 讨论(0)
  • 2021-01-04 02:32

    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
    } 
    

    Link to Scala Docs

    0 讨论(0)
提交回复
热议问题