• [^] # Re: AH ah ah ...

    Posté par . En réponse au journal Java 9 est dehors. Évalué à 3.

    Par exemple Scala est fortement et statiquement typé, mais infère beaucoup de choses, là ou Java infère que dalle.

    Si, java faisait déjà un peu d'inférence en java 7, avec l'opérateur "diamant" qui permet d'écrire ça

    List<String> lst=new ArrayList<>();

    à la place de ça

    List<String> lst=new ArrayList<String>();

    Ensuite, les lambda de java 8 reposent beaucoup sur l'inférence pour déduire quelle interface l'expression lambda implémente et quels sont les types des paramètres éventuels de l'expression.
    Ça permet par exemple, ayant une variable Map<String,Integer> map, de faire

    map.forEach((k,v) -> System.out.println("double of "+k+": "+v*2));

    où java 8 déduit tout seul que k est de type String et v de type Integer, à la place de

    map.forEach(new BiConsumer<String, Integer>() {
     public void accept(String k, Integer v) {
     System.out.println("double of "+k+": "+v*2);
     }
    });

    Et pour les lambda qui implémentent une méthode qui retourne une valeur (comme java.util.function.Function) il déduit tout seul le type de retour en fonction du résultat de l'expression, ou en fonction du return si on met un bloc de code dans la lambda.

    Et pour aller plus loin, li y a le JEP 286, qui malheureusement n'a pas été inclus dans java 9 et dont on espère que ce sera pour java 10.