2017-03-07 111 views
0

我看到了这个问题:Scala: public static final in a class而这其中,太:http://www.scala-lang.org/old/node/9178但我不能让它工作...如何在Scala构造器中使用“static final constant”?

我想要做的就是斯卡拉相当于Java代码的:

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访问?

感谢您的任何解决办法,对于任何解释,使我的Scala更易消化...

回答

1

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("...")) 
} 
+0

谢谢,但在这种情况下,我有一个问题...... WSDL不只是一个硬编码字符串,但像config.getProp东西(”一个属性“),其中config是一个在我的App对象中初始化的隐式值。由于我看到的对象不能用任何参数初始化,我怎样才能将我的配置值传递给伴随对象?我将编辑我的问题... – Cheloute

+0

@Cheloute你如何在Java中使用静态最终变量来做到这一点?然后你也不能依赖传递给你的构造函数的东西。 –

+0

@ Jasper-M你是对的,我的问题是现在我的配置实现..好吧,这个解决方案是好的,所以!谢谢! – Cheloute