Slide 1

Slide 1 text

Java-Scala interoperability Sean Sullivan April 19, 2016 Portland Java User Group

Slide 2

Slide 2 text

• software engineer • 20 years Java • 5 years at Gilt • back office systems @ Gilt About me

Slide 3

Slide 3 text

• Scala @ Gilt.com • Scala on the Java VM • code examples Agenda

Slide 4

Slide 4 text

www.gilt.com

Slide 5

Slide 5 text

https://www.gilt.com/checkout

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

“The Scala 2.11.x series targets Java 6" http://www.scala-lang.org/news/2.11.0/

Slide 8

Slide 8 text

http://scala-lang.org/news/2.12-roadmap/ “The official Scala 2.12 distribution will be built for Java 8 (and thus require it)”

Slide 9

Slide 9 text

Scala case classes and JSP’s

Slide 10

Slide 10 text

case class Thing( name: String, color: String)

Slide 11

Slide 11 text

thing.jsp <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

Slide 12

Slide 12 text

JSP expression language expects a JavaBean with “getter” methods

Slide 13

Slide 13 text

import scala.reflect.BeanProperty case class Thing( @BeanProperty name: String, @BeanProperty color: String) @BeanProperty annotation

Slide 14

Slide 14 text

Collections

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

• convert java.util.List to Scala collection • convert java.util.Set to Scala collection • convert java.util.Map to Scala collection • convert Scala List to java.util.List Common scenarios

Slide 17

Slide 17 text

import scala.collection.JavaConverters._

Slide 18

Slide 18 text

import java.util.{ArrayList => JArrayList}
 import scala.collection.JavaConverters._
 
 val jArrayList = new JArrayList[String]
 jArrayList.add("a")
 jArrayList.add("b")
 jArrayList.add("c")
 
 val scalaList = jArrayList.asScala
 
 scalaList should be (List("a", "b", "c"))


Slide 19

Slide 19 text

Google Guava library

Slide 20

Slide 20 text

• com.google.common.base.Optional • com.google.common.util.concurrent.ListenableFuture

Slide 21

Slide 21 text

Guava @ Gilt

Slide 22

Slide 22 text

Guava Optional -> Scala Option Scala Option -> Guava Optional

Slide 23

Slide 23 text

import com.gilt.gfc.guava.GuavaConverters._

Slide 24

Slide 24 text

Guava Future -> Scala Future Scala Future -> Guava Future

Slide 25

Slide 25 text

import com.gilt.gfc.guava.future.FutureConverters._

Slide 26

Slide 26 text

Java 8

Slide 27

Slide 27 text

https://github.com/scala/scala-java8-compat

Slide 28

Slide 28 text

import scala.compat.java8.FutureConverters._ Java 8 Future to Scala Future

Slide 29

Slide 29 text

import scala.compat.java8.OptionConverters._ java.util.Optional to scala.Option

Slide 30

Slide 30 text

https://github.com/sullis/java-scala-interop-examples

Slide 31

Slide 31 text

The end

Slide 32

Slide 32 text

No content