scala - 消除与父类(super class)的类字段同名的构造函数参数的歧义

标签 scala

在使用 Scala 时,我有一个这样的代码:

class Superclass(var i : Int){}

class Subclass(i : Int) extends Superclass(0) {
   print(i)
}

发现print(i)打印出Subclass(i : Int)

的构造函数参数i

现在,我的问题是:在这种情况下,我如何访问 Superclass 的字段 i

最佳答案

Type ascription可以向上转换 this 的类型,从而有效地消除两个标识符的歧义

class Subclass(i : Int) extends Superclass(0) {
  print((this: Superclass).i)
  print(i)
}

作为旁注,还存在以下 syntax可以在方法成员的情况下使用(并且可能不为人所知)

super[ClassQualifier]

例如,考虑以下情况

trait A {
  def f = "A"
}

trait B extends A {
  override def f = "B"
}

class C extends A with B {
  println(super[A].f)
  println(super[B].f)
  println(f)
  
  override def f = "C"
}

new C
// A
// B
// C

关于scala - 消除与父类(super class)的类字段同名的构造函数参数的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62682390/

相关文章:

scala - 从 Scala Set 到 Java Set 的隐式转换

Scala: "override protected val"在定义案例类构造函数时导致错误

scala - 在 Scala 中创建 SparkSession 时出现 java.lang.InterruptedException

java - 仅在 Spark 中可见的 Shapeless 中的 NoSuchMethodError

scala - 来自 Scala 反射的类型

scala - 遍历任意长度的元组

scala - 使用 OFormat 序列化案例类时从 Play 应用程序收到警告

scala - 组合 2 个列表的元素

scala - 如何让 Kotlin 的类型安全构建器在 Scala 中工作?

sql - Spark SQL - 转义查询字符串