如何在Scala构造函数中使用“static final constant”?

时间:2017-03-07 09:54:32

标签: scala

我看到了这个问题:Scala: public static final in a class也是这个问题:http://www.scala-lang.org/old/node/9178但是我无法让它发挥作用......

我想要做的是以下Java代码的Scala等价物:

public class MyClass extends AnotherClass{

  public static final String WSDL = MyConfig.getProp("...");
  public static final String SERVICES = {new QName(MyConfig.getProp("..."))};
  public MyClass(){
    super(WSDL,SERVICES);
  }
}

根据我搜索的内容,我尝试的是:

class MyClass (wsdl: String, services: Array[QName])(implicit val config:MyConfigClass) extends AnotherClass(wsdl,services:_*){
  val WSDL:String = config.getProp("...")
  val SERVICES: Array[QName] = Array(new QName(config.getProp("...")))
  def this() {
    this(WSDL,SERVICES:_*)
  }
}

但是Scala IDE告诉我WSDL和服务是未知的。此时声明WSDL和SERVICES不应该等同于Java MyClass.WSDL访问?

感谢任何解决方案,以及任何解释让我更易消化...

1 个答案:

答案 0 :(得分:4)

Scala没有static。你做的是将你在Java中的所有内容class MyClass (wsdl: String, services: Array[QName]) extends AnotherClass(wsdl, services: _*) { def this() { this(MyClass.WSDL, MyClass.SERVICES) } } object MyClass { final val WSDL: String = "..." final val SERVICES: Array[QName] = Array(new QName("...")) } 放在该类的伴随对象中。

这就是你的代码应该是这样的:

{{1}}