A trait compiles directly to an interface with default methods. This improves binary compatibility and Java interoperability. Scala and Java 8 interop is also improved for functional code, as methods that take functions can easily be called in both directions using lambda syntax. The FunctionN classes in Scala's standard library are now Single Abstract Method (SAM) types, and all SAM types are treated uniformly -- from type checking through code generation. No class file is generated for a lambda; invokedynamic is used instead.