【问题标题】:How to specify Foo.class in scala?如何在 Scala 中指定 Foo.class?
【发布时间】:2011-09-22 23:15:38
【问题描述】:

我使用的 java API 看起来像:

import com.google.code.morphia.Morphia;

.....

     val morphia = new Morphia();
     morphia.map(Hotel.class).map(Address.class);

但它给出了 scala 编译器错误。 上面的scala中的正确代码是什么?请注意,.map 被定义为 morphia API,不要与 scala map 混淆。

【问题讨论】:

  • 你得到什么编译错误?

标签: java scala


【解决方案1】:

编辑:查看 API 之后;你真正想要的是:

classOf[T]

例如。

classOf[Hotel]

More info 在 Scala 的类型系统上。


错误的答案,但如果有人被这个问题的标题误导,可能会有用:

class 是 Scala 中的保留字。如果你想将其用作字段或方法名,则需要用反引号将其括起来:

Hotel.`class`

【讨论】:

    【解决方案2】:

    你应该使用classOf[Hotel]

    【讨论】:

      【解决方案3】:

      假设您的问题与 .class 部分有关,则 Hotel.class 的 Scala 等效项将是 classOf[Hotel]Address 也是如此。

      希望这能解决您的问题,尽管如果没有看到完整的编译器输出很难判断。

      【讨论】:

      • 这修复了编译器错误。希望我在完成代码时也不会出现运行时错误。
      • 不幸的是,scala 选择了这种格式,它需要的输入量几乎是标准 Java 的两倍。我虽然 scala 需要更少的打字。
      • Scala 确实需要更少的输入;在实践中,您会发现几乎不需要 classOf[T] 构造。在 Scala 中处理依赖于类型的逻辑的常用技术是模式匹配。
      • @amc Scala 没有静态方法,因为静态方法在面向对象的环境中没有意义(它们的this 是什么?)。所以ClassName.class 没有意义——它不能是静态方法,ClassName 不是对象。另一方面,classOf[T] 是对象Predef 上的一个方法,因此非常有意义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 2011-01-07
      • 2011-01-27
      相关资源
      最近更新 更多