调用具有相同final类参数的超类构造函数

时间:2017-11-10 08:53:41

标签: scala

我不记得我怎么能把super调用到具有final和super class相同构造函数的超类

这是我的代码

class RestConnector(connectorProperties: Properties) extends BaseSyncConnector(connectorProperties) {

  def this(connectorProperties: Properties){
    this(connectorProperties)
   //Logic
  }

但它告诉我

Error:(22, 5) ambiguous reference to overloaded definition,
both constructor RestConnector in class RestConnector of type (connectorProperties: java.util.Properties)RestConnector
and  constructor RestConnector in class RestConnector of type (connectorProperties: java.util.Properties)RestConnector
match argument types (java.util.Properties)
    this(connectorProperties)
Error:(21, 7) constructor RestConnector is defined twice
  conflicting symbols both originated in file 'RestConnector.scala'
  def this(connectorProperties: Properties){

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

歧义

歧义是由类RestConnector的两个构造函数的定义引起的:

  • class RestConnector(connectorProperties: Properties)
  • def this(connectorProperties: Properties)

这个问题是编译器不知道选择哪个构造函数。

Super已被称为

此外,您不需要将调用添加到super,因为此代码已调用super:... extends BaseSyncConnector(connectorProperties)

这是一个例子:

scala> class A (b: String) { println(s"b : $b") }
defined class A

scala> class C(bb: String) extends A(bb) // <- call to super constructor (`A(bb)`)
defined class C

scala> new C("hello")
b : hello // <- you can see here that A's constructor is called 
res0: C = C@7e2f86e6

您可以采取哪些措施来解决问题

所以,你能做的是:

class RestConnector(connectorProperties: Properties) extends BaseSyncConnector(connectorProperties) {
    // put the logic here
}