首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala:定义'java‘可以使用的main方法

Scala:定义'java‘可以使用的main方法
EN

Stack Overflow用户
提问于 2009-11-15 22:52:03
回答 4查看 6.2K关注 0票数 6

Scala中定义main的常用方法(如下所示)可用于运行带有“scala”而不是“java”的类(因为创建的方法不是静态的)。如何编写可以用“java”执行的Scala类/对象?

代码语言:javascript
复制
object HelloWorld {
  def main(args: Array[String]) {
    println("Hello, world!")
  }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-16 07:22:31

你错了。你可以用"java“来运行它,你给出的不可能实现的理由是不正确的。在这里,让我展示一下"scala“里面是什么。

Unix:

代码语言:javascript
复制
#!/bin/sh
...
exec "${JAVACMD:=java}" $JAVA_OPTS -cp "$TOOL_CLASSPATH" -Dscala.home="$SCALA_HOME" -Denv.classpath="$CLASSPATH" -Denv.emacs="$EMACS"  scala.tools.nsc.MainGenericRunner  "$@"

Windows:

代码语言:javascript
复制
@echo off
...
if "%_JAVACMD%"=="" set _JAVACMD=java
...
"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner  %_ARGS%

但是,如果您碰巧定义了一个同名的类,那么可能存在一个影响您的bug,这取决于您使用的Scala版本。

票数 7
EN

Stack Overflow用户

发布于 2009-11-16 01:31:22

javap实际上会告诉你main是静态的。

代码语言:javascript
复制
javap HelloWorld
Compiled from "HelloWorld.scala"
public final class HelloWorld extends java.lang.Object{
    public static final void main(java.lang.String[]);
    public static final int $tag()  throws java.rmi.RemoteException;
}

也许您只需要在类路径中使用Scala jars?

在Stack Overflow上有一个类似的问题:"Creating a jar file from a Scala file“。

我只是用上面的说明(链接)验证了这一点。

只需通过以下方式运行:

代码语言:javascript
复制
java -jar HelloWorld.jar
票数 7
EN

Stack Overflow用户

发布于 2009-11-15 23:26:14

最简单的方法,也是我经常使用的方法,就是定义对象(就像您做的那样),而不是定义一个相应的“伴生”类。在这种情况下,Scala编译器将创建一对类,其名称与对象完全相同的类将包含静态转发方法,对于启动器入口点而言,这正是您所需要的。另一个类的对象名附加了$,这就是代码所在的位置。如果你对细节感兴趣,Javap将会透露这些信息。

因此,您的HelloWorld示例将按您所希望的方式工作,从而实现以下功能:

% scala pkg.package.more.HelloWorld args that you will ignore

兰德尔·舒尔茨

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1737714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档