SlideShare uma empresa Scribd logo
JDK 8: Lambda, Jigsaw e novidades
                       Eder Magalhães
                         @edermag
                       www.yaw.com.br

                                        Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Agenda
        Plano B: a evolução do Java;
        As novidades do JDK 8;
        Projeto Lambda;
        Projeto Jigsaw;
        Type Annotations;
        Planejamento e datas;
        Links;




                                       Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Evolução do Java pós Oracle
        Passados 6 anos;
        Várias funcionalidades solicitadas;
        Qual planejamento para entrega?




                                              Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Evolução do Java pós Oracle
        Passados 6 anos;
        Várias funcionalidades solicitadas;
        Qual planejamento para entrega?

        A decisão foi compartilhada com a comunidade:
              Plano A:
                       JDK 7 completo com previsão para 2012;
              Plano B:
                       JDK 7 com algumas features com previsão para 2011;
                       JDK 8 com funcionalidades complementares com previsão para o
                       final de 2012;


                                                                Globalcode	
  –	
  Open4education
Saturday, July 7, 12
A escolha foi o Plano B!




                                 Globalcode	
  –	
  Open4education
Saturday, July 7, 12
As novidades do JDK 8 (JSR 338)
            Projeto Lambda: uma linguagem mais eficiente;
            Projeto Jigsaw: suporte a definição de módulos;
            Type Annotations;

            Conclusão do Projeto Coin;
            Nova API para datas no Java;




                                               Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Projeto Lambda:
                      Java funcional




                                 Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Mas afinal...
            O que é um Lambda Expression (closure)?


  Lambda expression é um bloco de código (função)
  anônimo, com declarações e expressões, que pode
  ser assinalada a uma variável.




                                            Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Motivação
            Tornar o Java mais eficiente em ambientes
            multicore;
            Emprega ao Java um modelo de programação
            funcional;
            Sintaxe mais simples e clara se comparada a
            classes anônimas;




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Projeto Lambda (JSR 335)
            Definição de funções anônimas;
            Permite criar referência a métodos;
            Interfaces com default methods;
            Estipula interfaces funcionais (SAMs);
            Mudanças nas bibliotecas do Java (Collection)
            para se adequar ao Lambda;
            Torna o código mais expressivo;




                                              Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Tarefa básica: ordernar array em Java


       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};


       Arrays.sort(nomes,
          new Comparator<String>() {
            public int compare(String s1, String s2) {
                return s1.compareToIgnoreCase(s2);
            }
          }
       );




                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Tarefa básica: ordernar array em Java


       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};


       Arrays.sort(nomes,
          new Comparator<String>() {
            public int compare(String s1, String s2) {
                return s1.compareToIgnoreCase(s2);
            }
          }
       );




                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Tarefa básica: ordernar array em Java


       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};


       Arrays.sort(nomes,
          (String s1, String s2) -> s1.compareToIgnoreCase(s2));




                        Lambda Expression



                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Ordenando strings com Lambda II


       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};


       Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);
       Arrays.sort(nomes, c);




                        Target typing



                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Ordenando strings com Lambda III


       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};


       Arrays.sort(nomes, String::compareToIgnoreCase);




                         Method reference



                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Functional interfaces
            Interfaces com um método, utilizadas em
            callback;
            Conhecidas anteriormente como SAM Types.
            Exemplos:
               Comparator
               Runnable
               ActionListener
               FileFilter
               PathMatcher
               ...
                                           Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Detalhes sobre lambdas expressions
            Sintaxe também pode ser usada em return;
            Variáveis não precisam ser final;
            É possível utilizar target typing para definir
            atributos;




                                                  Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Method references
            Funcionam como expressions, a diferença é que
            não definem o corpo e sim a chamada a um
            método qualquer;

            Tipos de métodos:
              Métodos static;
              Um método específico de um determinado
              objeto;



                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
As coleções com Lambda
            Definem uma forma mais inteligente para
            navegar sobre elementos;
            Modelo parecido com SQL!




                                              Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Navegação nos elementos

       List<Aluno> alunos = buildAlunos();

       //navegar em todos os alunos
       for (Aluno a: alunos) {
           System.out.println("t"+a);
       }




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Navegação nos elementos

       List<Aluno> alunos = buildAlunos();

       //navegar em todos os alunos
       for (Aluno a: alunos) {
           System.out.println("t"+a);
       }

       //navegar somente nos aprovados
       for (Aluno a: alunos) {
           if (a.getNota() > 5) {
               System.out.println("t"+a);
           }
       }




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Navegação nos elementos com Lambda

       List<Aluno> alunos = buildAlunos();

       //navegar em todos os alunos
       alunos.forEach(a -> { System.out.println("t" + a); });


       //navegar somente nos aprovados
       alunos.filter(a -> a.getNota() > 5)
           .forEach(a -> { System.out.println("t" + a); });




                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Interfaces: método com corpo!
            A partir de lambda será possível definir um
            comportamento default para métodos declarados
            em interfaces!




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Projeto Jigsaw:
                       Java modular




                                 Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Motivação
            Java é distribuído monoliticamente;
            O rt.jar é grande!
            Com Java 7, são quase 20k classes;
            Complexidade em lidar com legado (16 anos);




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Projeto Jigsaw
            Suporte a modularização da linguagem Java;
            Tornar o modelo de distribuição e execução do
            Java mais eficaz;




                                              Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Módulo
          É formado por um conjunto de classes e
          interfaces;
          Pode determinar uma versão;
          Pode definir um entry-point;
          Indica a dependência a outros módulos, se
          necessário;
          Restringe o acesso;
          O módulo é definido em modules-info.java;



                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Exemplo de módulo


       //Arquivo modules-info.java

       module yaw.projetos @ 1.0 {
         class yaw.projetos.Main; //entry-point

           requires yaw.core @ 0.5;   //dependência

           exports yaw.projetos;      //expõe o pacote
       }




                                                         Globalcode	
  –	
  Open4education
Saturday, July 7, 12
O build
          Compilação: javac -modulepath ...
          Novos programas:
            jmod > definir biblioteca e realizar instalação
            do módulo;
            jpkg > distribuição do módulo;
          Executar: java -m <modulo>




                                                Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Vamos experimentar
          Demo I:
            compilar e executar um módulo simples;
          Demo II:
            definir relacionamento entre dois módulos;
          Demo III:
            exemplo de módulo que expõe um service;




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
O que mais
          Os módulos são carregados estaticamente;
          Interoperabilidade com OSGI e Maven;
          Integração com os IDEs Java;




                                           Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Type Annotations (JSR 308)

            Utilizar anotações em outros trechos do código;

            Criar um mecanismo eficiente com regras e
            validação de tipos do Java baseado em
            anotações. A evolução da idéia implementada
            com @Override;




                                               Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Type Annotations Demo
       public void execute(@NonNull Object ref) {
         //algum processamento
       }

       ...

       execute(new Object()); //ok!
       execute(null); //ñ compila!

       @NonNull Object ref = getObject();

       List<@NonNull String> nomes = ...
       nomes.add(null); //ñ compila!


       class ValorNumerico<T extends @Nullable Number> { ...}

       ValorNumerico<@Nullable Integer> v1; //ok!
       ValorNumerico<@NonNull Integer> v2; //ñ compila!


                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Planejamento de entregas
          M1: abril de 2012;
          M2: junho de 2012;
          ...
          M6: janeiro de 2013;

           GA: setembro de 2013;




                                   Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Experimente:
              http://jdk8.java.net
              http://jdk8.java.net/lambda
              http://download.java.net/jigsaw/b38/




                                        Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Código disponível em:

    https://github.com/edermag/yaw-jdk8-lambda
    https://github.com/edermag/yaw-jdk8-jigsaw




                                    Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Rumores sobre o Java 9
            VM auto ajustável (self tuning);
            Suporte a Big Data;
            Reificação dos tipos genéricos;
            Criar um protocolo de meta-objetos para
            comunicação com outras linguagens;
            Suporte a continuations;




                                              Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Links
        http://openjdk.java.net/
        http://openjdk.java.net/projects/jdk8/
        http://openjdk.java.net/projects/jigsaw/doc/
        quickstart.html
        http://openjdk.java.net/projects/lambda/
        http://www.infoq.com/br/news/2012/04/jdk-8-
        milestone-release-dates
        http://openjdk.java.net/jeps/104
        http://slideshare.net/edermag




                                            Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Obrigado !

                       eder@yaw.com.br
                          @edermag




                                         Globalcode	
  –	
  Open4education
Saturday, July 7, 12

Mais conteúdo relacionado

PDF
Linguagem Java - Conceitos e Técnicas
PPTX
Módulo 9 - Introdução à Programação Orientada a Objectos
PPT
Curso Java Basico
PDF
Java 02
PDF
Conceitos Básicos de OO e Java
PDF
POO - 01 - Introdução ao Paradigma Orientado a Objetos
PDF
Curso de java 02
ODP
Paradigma Orientado a Objeto
Linguagem Java - Conceitos e Técnicas
Módulo 9 - Introdução à Programação Orientada a Objectos
Curso Java Basico
Java 02
Conceitos Básicos de OO e Java
POO - 01 - Introdução ao Paradigma Orientado a Objetos
Curso de java 02
Paradigma Orientado a Objeto

Mais procurados (20)

PDF
Minicurso de Lógica e Linguagem Java 6.0
PPT
Introdução a programação Orientada a Objeto
PPTX
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
PDF
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
PDF
Java VS Kotlin
PPTX
JAVA - Orientação a Objetos
PDF
Curso Java Basico
PDF
Aula 02 - Principios da Orientação a Objetos (POO)
PDF
Linguagem de Programação Java para Iniciantes
ODP
Java - Boas práticas
PDF
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
PDF
Hibernate avançado-hql-criteria
PDF
POO - 10 - Herança
PDF
Implementando enterprise patterns com PHP
PDF
Livro - código limpo caps (3,4) (clean code)
PDF
Intro à Graphql
PDF
Linguagem Java
Minicurso de Lógica e Linguagem Java 6.0
Introdução a programação Orientada a Objeto
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
Java VS Kotlin
JAVA - Orientação a Objetos
Curso Java Basico
Aula 02 - Principios da Orientação a Objetos (POO)
Linguagem de Programação Java para Iniciantes
Java - Boas práticas
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
Hibernate avançado-hql-criteria
POO - 10 - Herança
Implementando enterprise patterns com PHP
Livro - código limpo caps (3,4) (clean code)
Intro à Graphql
Linguagem Java
Anúncio

Semelhante a JDK8: Lambda, Jigsaw e novidades (20)

PDF
As modificações na Linguagem: Java 7 e Java 8
PDF
Introdução a Plataforma Java EE
PDF
Desenvolvimento Produtivo com Spring Roo
PDF
Spring framework 2.5
PPT
Introdução a JPA e Hibernate - TDC 2012
PDF
JavaEE 7, na era do cloud computing
PDF
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
PPT
Python x R: mas e o Weka?
PPT
TDC2016SP - Python x R: mas e o Weka?
PPT
Apresentação curso de Extensão em Java (UERJ-IME) v1
PDF
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
PPTX
Introdução ao desenvolvimento de apps para Android - Dia 1/2
PDF
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
PDF
Compweek
PDF
Usando Java 8 no Android
PDF
TDC2018SP | Trilha Ruby - Uma Aplicação Ruby On Rails Integrada com GraphQL, ...
PDF
Rails API com GraphQL
ODP
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
PDF
Functional programming for Old Object Oriented Developers
PPT
Google AppEngine and JEE
As modificações na Linguagem: Java 7 e Java 8
Introdução a Plataforma Java EE
Desenvolvimento Produtivo com Spring Roo
Spring framework 2.5
Introdução a JPA e Hibernate - TDC 2012
JavaEE 7, na era do cloud computing
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?
Apresentação curso de Extensão em Java (UERJ-IME) v1
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
Introdução ao desenvolvimento de apps para Android - Dia 1/2
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
Compweek
Usando Java 8 no Android
TDC2018SP | Trilha Ruby - Uma Aplicação Ruby On Rails Integrada com GraphQL, ...
Rails API com GraphQL
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Functional programming for Old Object Oriented Developers
Google AppEngine and JEE
Anúncio

Mais de Eder Magalhães (20)

PDF
Cvc programacao reativa
PDF
Concorrencia, baixa Latência e alta disponibilidade
PDF
Java Is Back, Novidade do Java 8
PDF
Desenvolva uma app Java web em poucos passos, com o Forge
PDF
MongoDB outras alternativas de persistência
PDF
Java e uma visão sobre PaaS
PDF
Futuro da linguagem e plataforma: Java 7 e 8
PDF
Arquiteturas Java EE no Google App Engine
PDF
Java7 tdc2011
PDF
Richfaces 4 - Desenvolvimento JSF mais rico
PDF
JSF 2 Components JustJava2011
PDF
Introducao Spring ROO
PDF
Introducao Google GO
PDF
Introducao ao Spring Web MVC
PDF
JavaFX: Abordagem Prática
PDF
Desenvolvimento RIA com GWT e Spring
PDF
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
PDF
Profissao java gwt e javafx
PPTX
JSF2 ScrumToys SestInfo 2010
PPTX
Android SestInfo 2010
Cvc programacao reativa
Concorrencia, baixa Latência e alta disponibilidade
Java Is Back, Novidade do Java 8
Desenvolva uma app Java web em poucos passos, com o Forge
MongoDB outras alternativas de persistência
Java e uma visão sobre PaaS
Futuro da linguagem e plataforma: Java 7 e 8
Arquiteturas Java EE no Google App Engine
Java7 tdc2011
Richfaces 4 - Desenvolvimento JSF mais rico
JSF 2 Components JustJava2011
Introducao Spring ROO
Introducao Google GO
Introducao ao Spring Web MVC
JavaFX: Abordagem Prática
Desenvolvimento RIA com GWT e Spring
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
Profissao java gwt e javafx
JSF2 ScrumToys SestInfo 2010
Android SestInfo 2010

Último (19)

PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
COBITxITIL-Entenda as diferença em uso governança TI
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Custos e liquidação no SAP Transportation Management, TM130 Col18
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Apple Pippin Uma breve introdução. - David Glotz
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Processos na gestão de transportes, TM100 Col18
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Aula 18 - Manipulacao De Arquivos python
Aula04-Academia Heri- Tecnologia Geral 2025
COBITxITIL-Entenda as diferença em uso governança TI

JDK8: Lambda, Jigsaw e novidades

  • 1. JDK 8: Lambda, Jigsaw e novidades Eder Magalhães @edermag www.yaw.com.br Globalcode  –  Open4education Saturday, July 7, 12
  • 2. Agenda Plano B: a evolução do Java; As novidades do JDK 8; Projeto Lambda; Projeto Jigsaw; Type Annotations; Planejamento e datas; Links; Globalcode  –  Open4education Saturday, July 7, 12
  • 3. Evolução do Java pós Oracle Passados 6 anos; Várias funcionalidades solicitadas; Qual planejamento para entrega? Globalcode  –  Open4education Saturday, July 7, 12
  • 4. Evolução do Java pós Oracle Passados 6 anos; Várias funcionalidades solicitadas; Qual planejamento para entrega? A decisão foi compartilhada com a comunidade: Plano A: JDK 7 completo com previsão para 2012; Plano B: JDK 7 com algumas features com previsão para 2011; JDK 8 com funcionalidades complementares com previsão para o final de 2012; Globalcode  –  Open4education Saturday, July 7, 12
  • 5. A escolha foi o Plano B! Globalcode  –  Open4education Saturday, July 7, 12
  • 6. As novidades do JDK 8 (JSR 338) Projeto Lambda: uma linguagem mais eficiente; Projeto Jigsaw: suporte a definição de módulos; Type Annotations; Conclusão do Projeto Coin; Nova API para datas no Java; Globalcode  –  Open4education Saturday, July 7, 12
  • 7. Projeto Lambda: Java funcional Globalcode  –  Open4education Saturday, July 7, 12
  • 8. Mas afinal... O que é um Lambda Expression (closure)? Lambda expression é um bloco de código (função) anônimo, com declarações e expressões, que pode ser assinalada a uma variável. Globalcode  –  Open4education Saturday, July 7, 12
  • 9. Motivação Tornar o Java mais eficiente em ambientes multicore; Emprega ao Java um modelo de programação funcional; Sintaxe mais simples e clara se comparada a classes anônimas; Globalcode  –  Open4education Saturday, July 7, 12
  • 10. Projeto Lambda (JSR 335) Definição de funções anônimas; Permite criar referência a métodos; Interfaces com default methods; Estipula interfaces funcionais (SAMs); Mudanças nas bibliotecas do Java (Collection) para se adequar ao Lambda; Torna o código mais expressivo; Globalcode  –  Open4education Saturday, July 7, 12
  • 11. Tarefa básica: ordernar array em Java String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, new Comparator<String>() { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } } ); Globalcode  –  Open4education Saturday, July 7, 12
  • 12. Tarefa básica: ordernar array em Java String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, new Comparator<String>() { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } } ); Globalcode  –  Open4education Saturday, July 7, 12
  • 13. Tarefa básica: ordernar array em Java String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2)); Lambda Expression Globalcode  –  Open4education Saturday, July 7, 12
  • 14. Ordenando strings com Lambda II String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2); Arrays.sort(nomes, c); Target typing Globalcode  –  Open4education Saturday, July 7, 12
  • 15. Ordenando strings com Lambda III String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, String::compareToIgnoreCase); Method reference Globalcode  –  Open4education Saturday, July 7, 12
  • 16. Functional interfaces Interfaces com um método, utilizadas em callback; Conhecidas anteriormente como SAM Types. Exemplos: Comparator Runnable ActionListener FileFilter PathMatcher ... Globalcode  –  Open4education Saturday, July 7, 12
  • 17. Detalhes sobre lambdas expressions Sintaxe também pode ser usada em return; Variáveis não precisam ser final; É possível utilizar target typing para definir atributos; Globalcode  –  Open4education Saturday, July 7, 12
  • 18. Method references Funcionam como expressions, a diferença é que não definem o corpo e sim a chamada a um método qualquer; Tipos de métodos: Métodos static; Um método específico de um determinado objeto; Globalcode  –  Open4education Saturday, July 7, 12
  • 19. As coleções com Lambda Definem uma forma mais inteligente para navegar sobre elementos; Modelo parecido com SQL! Globalcode  –  Open4education Saturday, July 7, 12
  • 20. Navegação nos elementos List<Aluno> alunos = buildAlunos(); //navegar em todos os alunos for (Aluno a: alunos) { System.out.println("t"+a); } Globalcode  –  Open4education Saturday, July 7, 12
  • 21. Navegação nos elementos List<Aluno> alunos = buildAlunos(); //navegar em todos os alunos for (Aluno a: alunos) { System.out.println("t"+a); } //navegar somente nos aprovados for (Aluno a: alunos) { if (a.getNota() > 5) { System.out.println("t"+a); } } Globalcode  –  Open4education Saturday, July 7, 12
  • 22. Navegação nos elementos com Lambda List<Aluno> alunos = buildAlunos(); //navegar em todos os alunos alunos.forEach(a -> { System.out.println("t" + a); }); //navegar somente nos aprovados alunos.filter(a -> a.getNota() > 5) .forEach(a -> { System.out.println("t" + a); }); Globalcode  –  Open4education Saturday, July 7, 12
  • 23. Interfaces: método com corpo! A partir de lambda será possível definir um comportamento default para métodos declarados em interfaces! Globalcode  –  Open4education Saturday, July 7, 12
  • 24. Projeto Jigsaw: Java modular Globalcode  –  Open4education Saturday, July 7, 12
  • 25. Motivação Java é distribuído monoliticamente; O rt.jar é grande! Com Java 7, são quase 20k classes; Complexidade em lidar com legado (16 anos); Globalcode  –  Open4education Saturday, July 7, 12
  • 26. Projeto Jigsaw Suporte a modularização da linguagem Java; Tornar o modelo de distribuição e execução do Java mais eficaz; Globalcode  –  Open4education Saturday, July 7, 12
  • 27. Módulo É formado por um conjunto de classes e interfaces; Pode determinar uma versão; Pode definir um entry-point; Indica a dependência a outros módulos, se necessário; Restringe o acesso; O módulo é definido em modules-info.java; Globalcode  –  Open4education Saturday, July 7, 12
  • 28. Exemplo de módulo //Arquivo modules-info.java module yaw.projetos @ 1.0 { class yaw.projetos.Main; //entry-point requires yaw.core @ 0.5; //dependência exports yaw.projetos; //expõe o pacote } Globalcode  –  Open4education Saturday, July 7, 12
  • 29. O build Compilação: javac -modulepath ... Novos programas: jmod > definir biblioteca e realizar instalação do módulo; jpkg > distribuição do módulo; Executar: java -m <modulo> Globalcode  –  Open4education Saturday, July 7, 12
  • 30. Vamos experimentar Demo I: compilar e executar um módulo simples; Demo II: definir relacionamento entre dois módulos; Demo III: exemplo de módulo que expõe um service; Globalcode  –  Open4education Saturday, July 7, 12
  • 31. O que mais Os módulos são carregados estaticamente; Interoperabilidade com OSGI e Maven; Integração com os IDEs Java; Globalcode  –  Open4education Saturday, July 7, 12
  • 32. Type Annotations (JSR 308) Utilizar anotações em outros trechos do código; Criar um mecanismo eficiente com regras e validação de tipos do Java baseado em anotações. A evolução da idéia implementada com @Override; Globalcode  –  Open4education Saturday, July 7, 12
  • 33. Type Annotations Demo public void execute(@NonNull Object ref) { //algum processamento } ... execute(new Object()); //ok! execute(null); //ñ compila! @NonNull Object ref = getObject(); List<@NonNull String> nomes = ... nomes.add(null); //ñ compila! class ValorNumerico<T extends @Nullable Number> { ...} ValorNumerico<@Nullable Integer> v1; //ok! ValorNumerico<@NonNull Integer> v2; //ñ compila! Globalcode  –  Open4education Saturday, July 7, 12
  • 34. Planejamento de entregas M1: abril de 2012; M2: junho de 2012; ... M6: janeiro de 2013; GA: setembro de 2013; Globalcode  –  Open4education Saturday, July 7, 12
  • 35. Experimente: http://jdk8.java.net http://jdk8.java.net/lambda http://download.java.net/jigsaw/b38/ Globalcode  –  Open4education Saturday, July 7, 12
  • 36. Código disponível em: https://github.com/edermag/yaw-jdk8-lambda https://github.com/edermag/yaw-jdk8-jigsaw Globalcode  –  Open4education Saturday, July 7, 12
  • 37. Rumores sobre o Java 9 VM auto ajustável (self tuning); Suporte a Big Data; Reificação dos tipos genéricos; Criar um protocolo de meta-objetos para comunicação com outras linguagens; Suporte a continuations; Globalcode  –  Open4education Saturday, July 7, 12
  • 38. Links http://openjdk.java.net/ http://openjdk.java.net/projects/jdk8/ http://openjdk.java.net/projects/jigsaw/doc/ quickstart.html http://openjdk.java.net/projects/lambda/ http://www.infoq.com/br/news/2012/04/jdk-8- milestone-release-dates http://openjdk.java.net/jeps/104 http://slideshare.net/edermag Globalcode  –  Open4education Saturday, July 7, 12
  • 39. Obrigado ! eder@yaw.com.br @edermag Globalcode  –  Open4education Saturday, July 7, 12