Scala中的主要方法

时间:2014-05-01 21:02:03

标签: class scala main

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

2 个答案:

答案 0 :(得分:18)

正如Eugene在评论中所说,Scala中没有静态方法。但请注意:

$ cat Echo.scala
object Echo {
  def main( args:Array[String] ):Unit = args foreach println
}

$ scalac Echo.scala

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

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

请注意,Echo类的类文件(不是Echo $,对象)确实有一个public static void main方法。 Scala为对象中定义的方法生成静态方法,以便与Java兼容。

但是,我考虑在Scala程序中创建一个不合时宜的主方法。请改用App trait;它更干净:

object Echo extends App {
  args foreach println
}

答案 1 :(得分:3)

当我想在智能创意scala编辑器中测试我的代码时,我只是在我的类下面创建一个伴随对象并在其中放入一个main方法。就这样。看一个例子:

class Colon {
    class Cow {
        def ^ (moon:Moon): Unit ={
        println("Cow jumped over the moon")
        }
    }
    class Moon{
        def ^:(cow:Cow) = println("This cow jumped over moon too")
    }
}
object Colon{
    def main(args: Array[String]): Unit = {
    val c:Colon = new Colon
    val cow = new c.Cow
    val moon = new c.Moon
    cow ^ moon
    cow ^: moon
    moon.^:(cow)
    }
}
相关问题