【问题标题】:using inherited method from Java class in Scala [duplicate]在Scala中使用从Java类继承的方法[重复]
【发布时间】:2013-04-23 14:29:02
【问题描述】:

我正在尝试编译扩展 Java 类的 Scala 类文件。这是类定义,它是最基本的。在加载时,在宿主应用程序中,对象应该使用超类的方法 'post' 将“Hello from Scala”写入宿主的输出窗口。

import com.cycling74.max.MaxObject;

public class FirstClass extends MaxObject{
    public FirstClass{
        post("Hello From Java");
    }
} 

这在应用程序中编译并运行良好。

这是我对 Scala 的翻译(老实说,我不是 100% 确定我完全理解 Scala 中的构造函数):

import com.cycling74.max._

class FirstClass() extends MaxObject {
    super.post("Hello from Scala")
}

但是,当我尝试使用 scalac 进行编译时,我收到以下错误:

dm$ scalac -cp max.jar FirstClass.scala 
FirstClass.scala:3: error: value post is not a member of com.cycling74.max.MaxObject with ScalaObject
    super.post("Hello from Scala")
              ^
one error found

我不确定为什么编译器告诉我“post”不是成员函数,我确定我搞砸了 Scala 语法,但无法确定哪里出了问题。

谢谢!

编辑

这是 Max 窗口的输出,除了按如下规定更改代码外,我刚刚将 Scala 库添加到 Max 的动态加载路径中。这很令人兴奋

MXJ System CLASSPATH:
   /Applications/Max 6.1/Cycling '74/java/lib/jitter.jar
   /Applications/Max 6.1/Cycling '74/java/lib/jode-1.1.2-pre-embedded.jar
   /Applications/Max 6.1/Cycling '74/java/lib/max.jar
MXJClassloader CLASSPATH:
   /Applications/Max 6.1/Cycling '74/java/classes/
   /Users/dm/maxmsp/classes
   /Users/dm/maxmsp/jars/jline.jar
   /Users/dm/maxmsp/jars/scala-compiler.jar
   /Users/dm/maxmsp/jars/scala-dbc.jar
   /Users/dm/maxmsp/jars/scala-library.jar
   /Users/dm/maxmsp/jars/scala-partest.jar
   /Users/dm/maxmsp/jars/scala-swing.jar
   /Users/dm/maxmsp/jars/scalacheck.jar
   /Users/dm/maxmsp/jars/scalap.jar
Jitter initialized
Jitter Java support installed
Hello from Scala

【问题讨论】:

  • MaxObject中post是如何定义的?
  • 我不太了解,因为 Max 发行版中只包含 jar。根据java doc,它是:public static void post(java.lang.String message)

标签: scala scala-java-interop


【解决方案1】:

假设post方法在MaxObject中的定义为..

public class MaxObject {        
    public static void post(java.lang.String message){
        System.out.println("printing from MaxObject.post :: " + message);
    }
}

你可以直接调用scala中的post方法为-

class FirstClass extends MaxObject {
    MaxObject.post("Hello from Scala")
}

事实上,如果您不强制扩展 MaxObject.. 您也可以将其用作..

class FirstClass{
    MaxObject.post("Hello from Scala")
}

把它当作:

val fc = new FirstClass   //> printing from MaxObject.post :: Hello from Scala

【讨论】:

  • 成功了!我正在将最大窗口的输出添加到问题中
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
相关资源
最近更新 更多