Что означает "рефлексивный доступ к методу элементарного типа структурного типа..." означает предупреждение в Scala?
После перехода на Scala 2.10 я получаю массу предупреждений:
рефлексивный доступ к структурному типу-члену... должен быть включен путем создания неявного языка значений. reflectiveCalls visible
Что это значит?
Ответ 1
Предупреждение фактически говорит, где искать в документации для объяснения:
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.
Ссылочная запись Scaladoc (не забудьте нажать стрелку |> влево, чтобы развернуть запись документации).
Ответ 2
Из Scala Документы:
Зачем его контролировать? Отражение доступно не на всех платформах. У популярных инструментов, таких как ProGuard, есть проблемы с этим. Даже там, где имеется отражение, рефлексивная отправка может привести к неожиданным ухудшениям производительности.
Подумайте об этом коде, который использует анонимный подкласс:
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
}