scala - 声明 "Class<? extends SomeType>"的 Scala 是什么

标签 scala parameters types

我显然遗漏了以下内容无法编译的原因:

trait SomeTrait{
def homepageClass[A <: SomeType]: Class[A]
}

class SomeOtherType extends SomeType

object SomeObject extends SomeTrait{
def homepageClass = classOf[SomeOtherType]
}

最佳答案

这里的问题是以下两个声明是不同的:

def homepageClass[A <: SomeType]: Class[A]  // has type parameters
def homepageClass = classOf[SomeOtherType]  // doesn't have type parameters

要完成您想要的,您需要声明一个抽象类型,如下所示:

trait SomeTrait{
  type A <: SomeType
  def homepageClass: Class[A]
}

object SomeObject extends SomeTrait {
  type A = SomeOtherType
  def homepageClass: Class[A] = classOf[SomeOtherType]
}

或者

trait SomeTrait[A <: SomeType] {
  def homepageClass: Class[A]
}


object SomeObject extends SomeTrait[SomeOtherType] {
  def homepageClass: Class[SomeOtherType] = classOf[SomeOtherType]
}

关于scala - 声明 "Class<? extends SomeType>"的 Scala 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3086093/

相关文章:

scala - 异步失败

c++ - 什么是声明和声明符?标准如何解释它们的类型?

c# - 作为参数传递的自定义类型

scala - 如何将多个传入的 TCP 连接表示为 Akka 流的流?

scala - 结构化流 - Foreach Sink

javascript - 在 Javascript 中获取查询字符串数组值

javascript - 如何 POST 参数,使其不会显示在查询字符串中,以确保用户无法直接更改 URL 中的值?

powershell - 如何在 native 不支持的powershell参数中使用通配符?

haskell - 如何将指定为自由单子(monad)的程序与预期指令的描述进行比较?

java - 使用NewHadoopRDD时如何给出文件名?