我打算编写一个主要从Java使用的库。但是,我想用Scala写这个。我已经阅读了有关Java / Scala互操作的大多数文档,但主要集中在使用现有库上,而不是在编写库时要确保无缝互操作的最佳实践。
有效执行此操作的一些方法是什么?理想情况下,消费者根本不会知道该库是用Scala编写的。
还有其他主要的图书馆吗?
我目前的计划是拥有一个API,该API可以显示Scala类型/功能所需的所有内容,然后在此之上具有一个较小的层,以转换为Java类型。这种方法有什么问题吗?
您有任何理由要这样做吗?编写一个可在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之间的区别。
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |