首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是“应该启用结构类型成员方法的反射访问...”Scala中的警告意味着什么?

什么是“应该启用结构类型成员方法的反射访问...”Scala中的警告意味着什么?
EN

Stack Overflow用户
提问于 2012-11-12 11:23:21
回答 3查看 4.9K关注 0票数 17

在切换到Scala 2.10之后,我收到了大量的警告:

结构类型成员方法的

反射访问...应通过使隐含值language.reflectiveCalls可见来启用

什么意思?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-12 13:42:55

该警告实际上告诉您在文档中查找解释的位置:

代码语言:javascript
复制
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 (确保单击左侧的|>箭头以展开documentation条目)。

票数 17
EN

Stack Overflow用户

发布于 2017-12-18 05:59:32

来自Scala文档:

为什么要控制它?反射并不是在所有平台上都可用。流行的工具,如ProGuard,在处理它时遇到了问题。即使在反射可用的地方,反射分派也会导致令人惊讶的性能下降。

考虑一下使用匿名子类的代码:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2021-01-23 02:22:31

我在使用一个函数将Option[Double or Long]除以100时遇到了以下警告:

代码语言:javascript
复制
  def safeDivideBy100[T <: AnyVal { def toDouble: Double }](number: Option[T]): Option[Double] =
     number match {
       case None    => None
       case Some(x) => Some(x.toDouble / 100)
     }

修复它只需要添加到文件的顶部:

代码语言:javascript
复制
import scala.language.reflectiveCalls
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13337976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档