2017-03-07 4 views
0

私はこの質問を参照してください。私は何をしたいことは、次のJavaコードのScalaのと同等であるhttp://www.scala-lang.org/old/node/9178が、私はそれを動作させることができない...Scalaコンストラクタで "static final constant"を使用するには?

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); 
    } 
} 
すぎ Scala: public static final in a classと、このいずれかを、

私は私が検索内容に基づいて、試してみました、次のとおりです。

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とSERVICEを宣言することは、Java MyClass.WSDLアクセスと同等ではないと思われますか?すべてのソリューションのための、そしてScalaはより消化私を作るために任意の説明のための

おかげで...

答えて

1

Scalaは何staticを持っていません。代わりに、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あなたは正しいです、私の問題は私の設定の実装です。さて、この解決策はOKです!ありがとう! – Cheloute

関連する問題