在这个问题中,我必须调用一个第三方Java库,该库期望java.util.concurrent.Future
,其结果来自Scala例程返回scala.concurrent.Future
。
def someScalaFunction(): scala.concurrent.Future[T]
def otherJavaMethod(arg: java.util.concurrent.Future[T]) = ...
我会将Scala-Future封装到一个新的Java-Future中,但是没有办法实现Java-Future方法< code > def cancel(mayinterruptirunning:Boolean):Boolean ,因为它会中断封装的Scala-Future(否则请告诉我)。
我该如何解决这个问题?这些是我想到的方法:
取消
的调用(或抛出一个Not实作错误
)一些ScalaFunction
以可能返回一个闭包,然后由调用者包装在Scala或JavaFuture中。1的问题。一些客户端可以依赖于< code>cancel的正确实现,但这可能不是很关键。2.会导致一个非常难看的api。
请注意,取消
仅尝试取消任务,根据Javadoc没有保证。因此,您实际上不必实现它来执行某些操作 - 根据将来的计算结果,忽略取消
调用可能不会对整个应用程序产生后续作用。
如果您真的需要取消它,请参阅此问题以获得半解决方案。
否则,您可以使用第二种解决方案——借助一些隐式转换,您可以使它看起来更好。
object JavaInterOp {
implicit def f2future[F[_]](f: () => T): java.util.concurrent.Future[T] = fc(f)
}
通过这种方式,导入可以控制您想要提供的转换以及何时提供。
这样做的一个问题是,它可能会在您并不真正想要的地方进行转换——它可能会产生令人惊讶的效果。
问题内容: 我已经读过Clojure vs. Scala的各种论述,而我意识到两者都有自己的位置。关于将Clojure和Scala进行比较时,有一些注意事项尚未得到完整的解释: 1.)两种语言中哪一种通常 更快 ?我意识到这从一种语言功能到另一种语言功能都会有所不同,但是对性能进行总体评估会有所帮助。例如:我知道Python字典的速度非常快。但作为一个整体,它是一个 多 比Java慢语。我不想和C
问题内容: 我正在学习Scala,并且有一个Java项目可以迁移到Scala。我想通过逐个重写类并检查新类没有破坏项目来迁移它。 该Java项目使用和。在新的Scala类中,我想使用Scala 并拥有漂亮的Scala代码。 问题在于新类(在Scala中添加了新类)无法与现有Java代码无缝集成:Java需要,Scala需要自己的。 这是问题的简化示例。有 Main , Logic , Dao类 。
Java 互操作 Clojure程序可以使用所有的java类以及接口。和在java里面一样 java.lang 这个包里面的类是默认导入的。你可以手动的用 import 函数来导入其它包的类。看例子: (import '(java.util Calendar GregorianCalendar) '(javax.swing JFrame JLabel)) 同时也可以看下宏ns下面的 [:
JavaScript 互操作 调用宿主语言代码最直接的办法就是通过 interop. JavaScript 的全局变量可以通过 js 命名空间访问. 对象的方法调用可以写成: (.log js/console "demo") ; console.log('demo') 访问对象的属性需要添加连字符: (.-name obj) ; obj.name 对象的实例化可以用 cljs 写, 注意结尾有点号
ed25519 java和js nacl都实现了ed25519加密签名方法。然而,我从ed25519 java获得了一个公钥和一个签名消息(使用公钥对应的私钥签名),并尝试在js中使用公钥验证签名消息。这给出了一个值,即签名的消息不能用公钥打开。 我的问题是,难道不能在Java中登录并在Javascript中验证签名吗?如果是,或者不是,原因是什么? Java代码: 检查有效调用返回true。 输
问题内容: 我们公司有一个基于Python的网站和一些基于Python的工作程序节点,它们通过Django / Celery和RabbitMQ进行通信。我有一个基于Java的应用程序,需要将任务提交给基于Celery的工作人员。我可以将作业从Java发送到RabbitMQ很好,但是基于Celery的工作人员从来没有接过工作。从查看两种类型的作业提交的数据包捕获来看,存在差异,但是我无法理解如何解释