Scacla与Java8的Feature转化
来源:互联网 发布:linux查看存储空间 编辑:程序博客网 时间:2024/05/29 04:35
在学习Akka时,自然会接触到scala语言,对于用惯了java的程序员来说,使用feature的特性更为熟练。所以有了本篇文章。
本节主要讨论feature在这两种语言中的转换与使用。
<dependency> <groupId>org.scala-lang.modules</groupId> <artifactId>scala-java8-compat_2.11</artifactId> <version>0.8.0</version> </dependency>
为实现转换,要用到上面的依赖,具体使用对比下面的示例。
import static scala.compat.java8.FutureConverters.toJava;
@Test public void testGreeterActorSendingOfGreeting3() throws InterruptedException { CountDownLatch latch=new CountDownLatch(1); final TestKit testProbe = new TestKit(system); final ActorRef helloGreeter = system.actorOf(Greeter.props("Hello", testProbe.getRef())); helloGreeter.tell(new Greeter.WhoToGreet("Akka"), ActorRef.noSender()); Future<Object> ask = ask(helloGreeter, new Greeter.Greet(), 2000); //scala ask.onComplete(o->{ Printer.Greeting greeting = testProbe.expectMsgClass(Printer.Greeting.class); assertEquals("Hello, Akka", o); return null; },system.dispatcher()); latch.await(); } @Test public void testGreeterActorSendingOfGreeting4() throws InterruptedException { CountDownLatch latch=new CountDownLatch(1); final TestKit testProbe = new TestKit(system); ActorRef printActor = system.actorOf(Printer.props()); final ActorRef helloGreeter = system.actorOf(Greeter.props("Hello", printActor)); helloGreeter.tell(new Greeter.WhoToGreet("Akka"), ActorRef.noSender()); Future<Object> ask = ask(helloGreeter, new Greeter.Greet(), 1000); //java CompletionStage<Object> future = toJava(ask); future.thenAccept(r->{ System.out.println("result:"+r); }); latch.await(); }
//scala ask.onComplete(new OnComplete<Object>() { @Override public void onComplete(Throwable throwable, Object o) throws Throwable { } }, system.dispatcher());
阅读全文