Что означает "рефлексивный доступ к методу элементарного типа структурного типа..." означает предупреждение в Scala? - программирование
Подтвердить что ты не робот

Что означает "рефлексивный доступ к методу элементарного типа структурного типа..." означает предупреждение в Scala?

После перехода на Scala 2.10 я получаю массу предупреждений:

рефлексивный доступ к структурному типу-члену... должен быть включен путем создания неявного языка значений. reflectiveCalls visible

Что это значит?

4b9b3361

Ответ 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
} 

Ссылка на Scala Документы