Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们可以在Java程序中编写Scala代码吗?_Java_Eclipse_Scala - Fatal编程技术网

我们可以在Java程序中编写Scala代码吗?

我们可以在Java程序中编写Scala代码吗?,java,eclipse,scala,Java,Eclipse,Scala,对于这个基本问题,我已经有了一个用Java编写的大型软件(我正在使用Eclipse Mars进行编辑),我想更改其中的一些类,并使用Scala而不是Java,这是可能的吗?就在: 无缝JAVA互操作—Scala在JVM上运行,因此JAVA和Scala堆栈可以自由混合,实现完全无缝的集成 如果您单击它,它将为您提供进一步的信息: 将Scala和Java无缝结合 Scala类最终是JVM类。您可以创建Java对象,调用它们的方法,并从Scala透明地继承Java类。类似地,Java代码可以引用Sca

对于这个基本问题,我已经有了一个用Java编写的大型软件(我正在使用Eclipse Mars进行编辑),我想更改其中的一些类,并使用Scala而不是Java,这是可能的吗?

就在:

无缝JAVA互操作—Scala在JVM上运行,因此JAVA和Scala堆栈可以自由混合,实现完全无缝的集成

如果您单击它,它将为您提供进一步的信息:

将Scala和Java无缝结合

Scala类最终是JVM类。您可以创建Java对象,调用它们的方法,并从Scala透明地继承Java类。类似地,Java代码可以引用Scala类和对象

在本例中,Scala类作者实现了Java接口Comparable并处理Java文件。Java代码使用来自同伴对象Author的方法,并访问Author类的字段。它还使用JavaConversion在Scala集合和Java集合之间进行转换

在这个例子中:

Author.scala

class Author(val firstName: String,
    val lastName: String) extends Comparable[Author] {
  override def compareTo(that: Author) = {
    val lastNameComp = this.lastName compareTo that.lastName
    if (lastNameComp != 0) lastNameComp
    else this.firstName compareTo that.firstName
  }
}
object Author {
  def loadAuthorsFromFile(file: java.io.File): List[Author] = ???
}
App.java

import static scala.collection.JavaConversions.asJavaCollection;
public class App {
    public List<Author> loadAuthorsFromFile(File file) {
        return new ArrayList<Author>(asJavaCollection(
            Author.loadAuthorsFromFile(file)));
    }
    public void sortAuthors(List<Author> authors) {
        Collections.sort(authors);
    }
    public void displaySortedAuthors(File file) {
        List<Author> authors = loadAuthorsFromFile(file);
        sortAuthors(authors);
        for (Author author : authors) {
            System.out.println(
                author.lastName() + ", " + author.firstName());
        }
    }
}
导入静态scala.collection.JavaConversions.asJavaCollection;
公共类应用程序{
公共列表loadAuthorsFromFile(文件文件){
返回新的ArrayList(asJavaCollection(
Author.loadAuthorsFromFile(文件));
}
公共无效排序器(列出作者){
集合。排序(作者);
}
公共无效显示排序器(文件){
列表作者=loadAuthorsFromFile(文件);
巫师(作者);
for(作者:作者){
System.out.println(
author.lastName()+,“+author.firstName());
}
}
}

您的示例可能是另一种方式,在Scala应用程序中使用Java类,但因为最终它只是JVM类(上面的示例在Scala代码中使用Java类,如
Java.io.File
),所以也是一样的。

src
中添加一个子文件夹,名为
Scala
,并将代码放在那里。您必须在Scala中完全重写该类。 之后,将Scala编译插件添加到
mvn.pom
或向谷歌咨询您的构建系统

<plugin>
  <groupId>net.alchim31.maven</groupId>
  <artifactId>scala-maven-plugin</artifactId>
  <version>3.2.0</version>
  <configuration>
    <charset>${project.build.sourceEncoding}</charset>
    <recompileMode>modified-only</recompileMode>
    <scalaCompatVersion>2.11</scalaCompatVersion>
    <scalaVersion>2.11.5</scalaVersion>
    <jvmArgs>
      <jvmArg>-Xmx1024m</jvmArg>
      <jvmArg>-DpackageLinkDefs=file://${project.build.directory}/packageLinkDefs.properties</jvmArg>
    </jvmArgs>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>compile</goal>
        <goal>testCompile</goal>
      </goals>
    </execution>
  </executions>
</plugin>

net.alchim31.maven
scala maven插件
3.2.0
${project.build.sourceEncoding}
仅修改
2.11
2.11.5
-Xmx1024m
-DpackageLinkDefs=file://${project.build.directory}/packageLinkDefs.properties
编译
测试编译

如果Scala已经用Java编写,为什么要改为Scala?有什么具体的原因吗?是的,这是完全可能的,事实上我以前也这么做过。您需要Scala编译器,该编译器将从您的Scala代码中生成Java
.class
。谢谢@kocko,非常感谢您的任何参考或示例:)好吧……可能是一个很好的起点。