【问题标题】:Scala-ARM for class members?面向班级成员的 Scala-ARM?
【发布时间】:2014-07-31 12:56:33
【问题描述】:

我对 Scala 很陌生,所以请原谅我的基本问题。

我正在尝试让 Scala-Arm 管理类成员的发布,但在范围界定方面遇到了问题。

虽然下面的代码可以编译,但是失败了

java.lang.NoSuchMethodError: resource.ManagedResource.reflect()Ljava/lang/Object; 

在反射调用中。因此,managed_file 似乎正在立即发布。

对于局部变量,我使用了for (managed_file <- managed(...)) 语法,但在这里我看不到该怎么做。

有人建议吗?

class Writer(outputPath: String){

  val managed_file = managed(new FileOutputStream(new File(outputPath)))

  def write(something : SomeClass) {
    var bos = new ByteArrayOutputStream
    var dos = new DataOutputStream(bos)

    try {
      dos.write(Marshal.dump(something))
      bos.writeTo(managed_file.reflect)
    } 
    finally {
      dos.close
      bos.close
    }
  }
}

【问题讨论】:

    标签: scala scala-arm


    【解决方案1】:

    NoSuchMethodError 是编译/运行时差异错误。您针对 Scal ARM 成功编译,但在运行时未找到(或至少在同一版本中未找到)。

    【讨论】:

    • 感谢您的帮助。我搜索了我的系统,我只有一个 Scala ARM JAR。我已经更新了我的类路径以明确引用它,但我仍然得到相同的行为。运行时解析问题不意味着我应该使用局部变量for(managedFile <- managed(...)) 语法得到相同的错误吗?
    • NoSuchMethodError 不能是语法,编译器会检测到。您是否在 REPL 中尝试过您的代码(从 SBT CLI 启动控制台)?
    • 再次感谢。我刚刚尝试从 REPL 运行它并得到了相同的结果。虽然这不是通过 SBT,但我不知道该怎么做,明天我会调查一下。
    • 在 SBT REPL 中,尝试classOf[resource.ManagedResource].getMethod("reflect", Array[Class]())
    • 在 SBT 中尝试 show dependencyClasspath 检查从哪个 JAR Scala-ARM 加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多