从main实例化相同的scala类

时间:2014-01-03 23:22:06

标签: scala

在Java中,我通常会这样做:

class Hello {
    public Hello() {
        System.out.println("hello");
    }

    public static void main(String args[]) {
        new Hello();
    }
}

如何在Scala中执行类似的操作?我开始使用Hello作为Scala对象,如下所示:

object Hello {

    // constructor goes here

    def main(args: Array[String]): Unit = {
        println("hello") // new Hello() would go here
    }
}

但我无法实例化。如果我改变,我将object关键字更改为class,然后scala编译器就会抱怨,即

class Hello {

    println("hello")

    def main(args: Array[String]): Unit = {
        new Hello()
    }
}

我知道我可能在这里走错了路,但我想摆脱苦难。

2 个答案:

答案 0 :(得分:2)

通常在Scala中我使用代表应用程序的对象:

object Hello extends App {
    println("hello")
}

答案 1 :(得分:1)

我认为您不了解Scala object是什么。它实际上相当于Java单例,其中创建并实例化了匿名类。

如果您在此方案中将代码重新编译为Java:

object Hello {}

它会得到类似的东西:

public class Hello$ {
  public static Hello$ $MODULE = new Hello$()
}

这已经是单身,相当于val。你甚至可以这样做:

val x = Hello; // x will be of type Hello.type