在Scala中编写Java库的最佳实践

Joh*_*ard 1 java scala

我打算编写一个主要从Java使用的库。但是,我想用Scala写这个。我已经阅读了有关Java / Scala互操作的大多数文档,但主要集中在使用现有库上,而不是在编写库时要确保无缝互操作的最佳实践。

有效执行此操作的一些方法是什么?理想情况下,消费者根本不会知道该库是用Scala编写的。

还有其他主要的图书馆吗?

我目前的计划是拥有一个API,该API可以显示Scala类型/功能所需的所有内容,然后在此之上具有一个较小的层,以转换为Java类型。这种方法有什么问题吗?

puh*_*len 5

您有任何理由要这样做吗?编写一个可在Scala中使用的Scala库是一回事,但是如果您要专门针对Java,那么使用Java编写该库可能很有意义。

理想情况下,消费者根本不会知道该库是用Scala编写的。

与此相关的最大问题将是临时依赖性。即使您没有使用您的第三方库,Scala标准库又如何呢?如果您的库将用在没有使用Scala的项目中,那么除非您在代码中根本不使用标准库,否则他们也需要引入整个Scala库。

您将要使用Java集合而不是Scala集合,因为这就是您的客户端代码所期望的。您的公共界面中应该没有Scala标准库类。这也意味着使用Java功能接口而不是Scala函数类型

避免伴随对象,除非它们会编译为类的静态成员。从Java访问Scala伴随对象很麻烦。

对getters / setters / case类使用Java Bean约定,而不要使用常规的Scala属性(我相信Scala为此提供了注释)。

就现有的库而言,Spark Java API是用Scala编写的,但是Spark是Scala的主要构建版本,具有一些Java支持,但也许值得一看(尤其是要了解Scala和Java api之间的区别。