class - Scala 中的主要方法

标签 class scala main

我写了一个 Scala 类并定义了 main()其中的方法。它编译了,但是当我运行它时,我得到了 NoSuchMethodError:main .在我看到的所有 Scala 示例中,主要方法都定义在一个对象中。在 Java 中,我们在类中定义 main 方法。是否可以定义 main()在 Scala 类中还是我们总是需要一个对象?

最佳答案

要回答您的问题,请查看以下内容:
我做了一个scala类,编译反编译,得到的很有趣。

class MyScalaClass{
   def main(args: Array[String]): Unit = {
         println("Hello from main of class")
   }
}

Compiled from "MyScalaClass.scala"

public class MyScalaClass {
      public void main(java.lang.String[]);
      public MyScalaClass();
}

所以这意味着当scala类转换为java类时,scala类的main方法又转换为java类中的main方法不是静态的。
因此我们将无法运行程序,因为 JVM 无法在程序中找到起点。

但是,如果使用 'object' 关键字完成相同的代码,则:
Compiling the following:

object MyScalaClass{
 def main(args: Array[String]): Unit = {
  println("Hello from main of object")
 }
}

Decompiling the following:
javap MyScalaClass$.class

Compiled from "MyScalaClass.scala"
public final class MyScalaClass$ {
 public static final MyScalaClass$ MODULE$;
 public static {};
 public void main(java.lang.String[]);
}

Decompiling the following
javap MyScalaClass.class

Compiled from "MyScalaClass.scala"
public final class MyScalaClass {
  public static void main(java.lang.String[]);
}

所以这里我们在 MyScalaClass.class 中得到了 public static void main,因此这里的 main 方法可以由 JVM 直接执行。

我希望你得到你的答案。

关于class - Scala 中的主要方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23416536/

相关文章:

c++ - 在 main 中调用类方法,更改不会在类方法外部持续存在?

c++ - 匿名类上的虚拟表

c# - 是否可以复制具有相似字段的类型实例?

java - 您可以在 Java 中声明无参数方法以在 Scala 中使用吗?

scala - 在 Scala/Spark 中从 RDD 中提取数据

c++ - 这个声明是什么意思?

scala - 使用 MockFactory 模拟配置对象

django - Django如何设置主页

java - 当我尝试在主要方法 “ArrayStack@6acbcfc0”中执行时,我总是独自得到此消息。

return - 为什么Rust在主函数中没有返回值,以及无论如何如何返回一个值?