如何使用;“静态最终常数”;在Scala构造函数中?

如何使用;“静态最终常数”;在Scala构造函数中?,scala,Scala,我看到了这个问题:还有这个问题:但我不能让它工作 我想做的是Scala等效于以下Java代码: public class MyClass extends AnotherClass{ public static final String WSDL = MyConfig.getProp("..."); public static final String SERVICES = {new QName(MyConfig.getProp("..."))}; public MyClass(){

我看到了这个问题:还有这个问题:但我不能让它工作

我想做的是Scala等效于以下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和服务不应该等同于Java MyClass.WSDL访问吗


感谢您提供的任何解决方案,以及让我更容易理解scala的任何解释…

scala没有
静态的
。相反,您要做的是将在Java中生成的
static
放在类的伴生对象中

您的代码应该是这样的:

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

谢谢,但在这种情况下,我有另一个问题。。。WSDL不仅仅是一个硬编码字符串,而是类似于config.getProp(“属性”),其中config是在我的应用程序对象中初始化的隐式值。由于我看到的对象不能用任何参数初始化,如何将配置值传递给伴随对象?我将编辑我的问题…@chelute在Java中如何使用静态最终变量?那么您也不能依赖传递给构造函数的内容。@Jasper-M您是对的,我现在的问题是配置实现。。好吧,这个解决方案是好的,所以!谢谢这不是100%等价:常量必须显式标记为
final val
,即使它们通过在
对象
最终类
中声明而隐式标记为
final
@Chelute Java的
final
有多种含义,
val
仅相当于其中一种含义,防止重新分配变量
final
还可以使方法不可重写,类不可扩展。因此,
final val
是在子类中不能重写的
val