2017-03-07 50 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