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=newArrayList<>();
à la place de ça
List<String>lst=newArrayList<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(newBiConsumer<String,Integer>(){publicvoidaccept(Stringk,Integerv){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.
[^] # Re: AH ah ah ...
Posté par wismerhill . En réponse au journal Java 9 est dehors. Évalué à 3.
Si, java faisait déjà un peu d'inférence en java 7, avec l'opérateur "diamant" qui permet d'écrire ça
à la place de ça
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
où java 8 déduit tout seul que k est de type String et v de type Integer, à la place de
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.