加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中的类型

发布时间:2020-12-16 19:20:48 所属栏目:安全 来源:网络整理
导读:有没有办法让一个方法总是返回调用它的同一个类的类型? 让我解释: class Shape { var mName: String = null def named(name: String): Shape = { mName = name this }}class Rectangle extends Shape { override def named(name: String): Rectangle = { s
有没有办法让一个方法总是返回调用它的同一个类的类型?

让我解释:

class Shape {
  var mName: String = null
  def named(name: String): Shape = {
    mName = name
    this
  }
}

class Rectangle extends Shape {
  override def named(name: String): Rectangle = {
    super.named(name)
    this
  }
}

这是有效的,但有没有办法在不必覆盖所有子类中的命名函数的情况下执行此操作?我正在寻找这样的东西(这不起作用):

class Shape {
  var mName: String = null
  def named(name: String): classOf[this] = { // Does not work but would be great
    mName = name
    this
  }
}

class Rectangle extends Shape {
}

任何的想法 ?或者这不可能吗?

解决方法

你需要使用this.type而不是classOf [this].

class Shape {
  var mName: String = null
  def named(name: String): this.type = {
    mName = name
    this
  }
}

class Rectangle extends Shape {
}

现在来证明它的工作原理(在Scala 2.8中)

scala> new Rectangle().named("foo")
res0: Rectangle = Rectangle@33f979cb

scala> res0.mName
res1: String = foo

this.type是一个编译类型的类型名称,而classOf是一个在运行时被调用以获取java.lang.Class对象的运算符.你不能使用classOf [this],因为参数需要是一个类型名称.尝试获取java.lang.Class对象时,您的两个选项是调用classOf [TypeName]或this.getClass().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读