 Salut les gars, la Java 9 a finalement été élevé. Aujourd'hui, je vais partager avec vous quelques des principales features que l'on a élevé pour cette nouvelle version. Juste une parole pour moi, mon nom est Irwant. Je travaille pour Authentica, je suis consultant pour la majorité des technologies de Java et des technologies de web. La Java 9, c'est le Jigsaw. Je pense que tous de vous l'avez oublié de Jigsaw. Jigsaw est vraiment la principale feature de Java 9. Jigsaw a été nécessaire pour deux raisons. La première raison est de la sécurité. En Java, vous n'aurez pas de moyens pour des gens désolé d'utiliser une partie de votre bibliothèque. C'était la principale issue, même dans le JDK, parce qu'il y avait quelques libraires internes que l'on a utilisées, comme Conn, Son, Misk et Safe, que l'on a utilisées par beaucoup de libraires, comme Mokito, etc. C'était une issue pour la team JDK, parce qu'ils ne voulaient pas que les gens puissent l'utiliser. C'est la première raison pour laquelle jigsaw a été introduit. La deuxième raison, c'est des performances. Java, comme tous les autres. Vous n'avez pas de moyens de juste choisir la partie de JDK ou de JRE pour créer une nouvelle version de JDK, et puis, pour que ça fasse vite sur les petits devises. Donc, ces deux raisons sont venus à jigsaw. Jigsaw, comme l'on l'a dit, et si vous savez que js, avec la notion d'export et de recueillir, c'est la même chose. J'ai deux projets, un main, qui est utilisé par la libraire, et c'est-à-dire que cette libraire a deux services, un, qui peut être utilisé par les gens, et un, qui devrait seulement être utilisé par la libraire. Donc, cette libraire est à l'intérieur d'un truc qui s'appelle l'intermédiaire, et cette libraire ne veut pas exposer à d'autres gens, pour avoir une bonne structure de la libraire, ils ont l'air d'utiliser dans un autre package, et dans Java, il n'y a pas de manière de limiter le scope d'un package. Si vous voulez, si vous ne voulez pas que les gens puissent utiliser cette classe, cette classe, vous devez l'utiliser dans ce package, vous devez l'utiliser, et puis, vous devez remettre l'enquête publique. Donc, vous devez juste remettre ça, et c'est seulement visible pour ce package. Mais puis, parce que de cela, vous devez changer la structure de votre libraire, et la plupart du temps, ce n'est pas bon. Donc, maintenant, avec Java 9, vous pouvez juste créer un module. Donc, pour créer un module, vous devez juste créer quelque chose sur module-info, et c'est tout. Vous devez juste donner un nom, ici, le nom n'est pas important. Par défaut, IntelliJ donne le même nom dans IntelliJ, mais vous pouvez le changer. Ce n'est pas nécessaire. Et puis, maintenant, vous avez un module Java 9, et si je retourne vers le main, non, je ne suis pas capable d'accès à cette libraire. Parce que je dois dire à Java, A, je veux utiliser cette libraire. C'est exactement comme Node.js. Si vous voulez utiliser quelque chose dans Node.js, vous devez l'importer. Donc, pour faire ça, nous allons transformer ça dans un module 2. Et si vous juste faites ça, maintenant vous pouvez récupérer la libraire. Je sais que vous pouvez utiliser ce que la libraire vous donne. Mais pour le moment, ce n'est pas suffisant. Parce que la libraire doit dire que la libraire est exposée. Pour faire ça, c'est vraiment facile. Vous allez au module utiliser export. Et maintenant, vous pouvez type le module que vous voulez exporter. C'est tout. Donc ici, j'ai com.LMA module. Et maintenant, je peux accès à cette libraire. Je n'ai toujours pas accès à cette libraire, mais c'est ok. Je ne suis pas supposé de l'utiliser. Si les gens ne veulent pas utiliser une partie de leur libraire, il y a un moyen de faire ça. Et c'est vraiment important. Donc, basiquement, c'est le moyen minimal d'utiliser Jigsaw. Si vous ne connaissez pas JS, pour vous, c'est facile. Il y a plus que ça. Basiquement, le même goes si vous utilisez class.forName. Si vous voulez utiliser class.forName par exemple, vous avez de l'importance. Parce que si vous essayez d'utiliser ça, ok, il va falloir il va falloir. Parce que maintenant, en Java 9, vous devez dire, ok, je veux utiliser Java.SQL. Java.SQL ici n'est pas directement importé par Java. Parce que maintenant, tout le JDK est divisé en deux modules plus petites. Vous avez un main-module appelé Java.base qui est automatiquement importé. Et ensuite, vous avez plusieurs modules et chaque fois que vous voulez utiliser un module, vous avez de l'importance. Donc, vous avez besoin de l'importance. Donc ici, ça va là-bas. Et quand il y a l'importance, c'est ok. Vous pouvez l'utiliser. Et c'est magique. Et c'est tout ce que vous avez besoin. Si vous utilisez Maven, il peut y avoir beaucoup d'issues. Parce que vous ne pouvez pas demander à tous les libraires et les maintenance, d'aider toutes les versions de leurs libraires pour ajouter ce module info dans leurs libraires pour vous utiliser. Donc pour cela, ils ont créé quelque chose qui s'appelle les modules automatiques. Donc, quand vous avez une dépendance, c'est-à-dire l'importance long. J'avais automatiquement créé un module qui s'appelle command. instead of the dash Lang Free. Et donc, vous pouvez juste importe cela et utiliser les libraires. Donc ici, vous pouvez faire quelque chose comme ça. Commands.Lang Free. Lang Free. Ok. C'est reconnaissant. Et non, ici, là-bas, je peux utiliser quelque chose de la libraire. Donc, ce n'est qu'à aider les gens à migrer à Java 9. C'était vraiment un récrément avant de relier cette version de Java 9. Il y a plus que ceci. Ceci est vraiment le syntaxe basique basé sur le récrément et l'export. Il y a beaucoup de choses comme le récrément et l'export. C'est comme quand vous voulez ouvrir, c'est comme quand vous voulez donner de l'accès aux libraires qui vont accéder à vous. Il y a quelque chose pour le récrément statique. Cela signifie qu'il y a un check durant la compilation, mais il n'y sera pas un check pendant le temps. Vous devez utiliser l'open et l'open si vous commencez à utiliser l'effectivité. Vous devez utiliser quelque chose avec l'utilisation qui est une sorte de dépendance d'injection. C'est vraiment la basique de Jigsaw. Jigsaw a été déservé par son talk parce que c'est vraiment complexe. Il y a beaucoup de cas de utilisation qui sont vraiment difficiles pour l'injection. Mais si vous pouvez commencer une nouvelle application, c'est peut-être intéressant pour Java 9. Bonne chance. Une autre chose avec Java 9 dans mon avis, parce que ce n'est pas l'opinion de tous les gens, c'est la j-shell. Donc maintenant, en Java, nous avons un shell. C'est quelque chose que j'ai mis en Java. Parce que parfois, vous voulez juste tester quelque chose que vous ne voulez pas juste créer un nouveau projet, parce que vous voulez essayer ça. Et même pour les nouveaux gens, quand vous commencez Java, à la plupart de la fois, vous devez avoir une idée. Et si vous n'avez pas une idée, vous devez comprendre ou compiler tout. Mais vous devez juste faire quelque chose. Vous devez juste faire 1 plus 1. Vous devez juste faire, je ne sais, Foo.comcat quelque chose. Vous devez juste faire des choses basiques. C'est vraiment cool pour les nouveaux gens. Et la j-shell est très bien design, je pense. Par exemple, les deux choses que j'ai créées sont automatiquement sauvées dans deux variables. Par exemple, il y a un code slash bar qui vous aide à voir toutes les variables déclarées. Et ici, vous pouvez voir que c'est créé deux variables, $1, $2, et maintenant je peux payer avec ces variables. Par exemple, $1, $1, $1. C'est le résultat de ma opération. Donc, dans la j-shell, il y a vraiment beaucoup de choses qui sont vraiment cool. Vous pouvez voir la liste de la commande que vous avez créée. Vous pouvez voir la histoire de toutes les commandes réelles. C'est juste la operation Java que vous avez créée et la liste de toutes les commandes que vous avez créées. Vous pouvez éditer la méthode parce que ce n'est pas facile d'écrire une méthode dans la j-shell. Donc, quand vous déclarez la méthode, vous pouvez utiliser quelque chose comme éditer la méthode. Et puis, ça va ouvrir. Je ne sais pas si ça marche, si je n'ai pas créé. Ça ne marche pas. Mais ça ouvre un JWT, comme une windows. Mais vous pouvez éditer ça, mais vous pouvez aussi éditer ça. Il y a des importe qui sont déjà faits. Mais vous pouvez choisir d'éditer votre propre libraire. Vous pouvez ouvrir les files avec la commande. Il y a vraiment beaucoup de choses dans cette j-shell. C'est vraiment cool. Vous avez le help qui vous aide. Vous avez l'autocompation, pour exemple. Vous avez le support pour les commentaires. Et en mon opinion, c'est vraiment un bon point, spécialement pour les nouveaux gens. Ou même, parfois, vous ne serez pas sûrs qu'on sait quel type c'est. OK, vous savez, c'est double. Parce que vous n'avez pas à rouler le main, vous ouvrez la j-shell et c'est OK. Et juste pour les gens qui utilisent IntelliJ, il y a une intégration. Il y a un console j-shell qui est directement là. C'est cool. Une autre chose. Il y a un bon improvement avec le process API. Si vous avez essayé de jouer avec le process API, c'est juste une messe en Java 8. Donc, par exemple, ici, c'est un moyen existant pour l'idée de la java que vous avez joué. Mais ça ne marche pas pour moi. J'ai utilisé les windows pour moi. Donc, je dois trouver une autre façon. Et je ne sais pas comment faire ça sur les machines Windows. Et c'est vraiment difficile parce que personne ne sait comment utiliser ça. Tout le temps, si vous voulez utiliser la java pour ouvrir comment utiliser, comment combiner. Et c'est juste une messe. Donc maintenant, vous avez un nouveau API pour ça. Donc, quelque chose de process et là, vous pouvez obtenir la courante. Et la courante, c'est la courante que vous travaillez avec. Donc, là-bas, vous pouvez juste displays d'infos, et c'est facile. Maintenant, ça ne dépend de la plateforme. Et c'est vraiment, vraiment sympa. Une autre chose, vous pouvez commencer le processus. Donc, pour ça, nous avons le processus builder. Le processus builder n'est pas nouveau. C'est là depuis java 6 ou quelque chose comme ça. C'est assez old, mais ce n'est pas que utilisé. Je vois beaucoup de code en utilisant l'exemple.exe. Mais le processus builder est meilleur. Et, avec ça, vous pouvez faire le même. Vous pouvez juste commencer. Vous pouvez juste obtenir le processus. Et là-bas, vous avez créé un nouveau processus. Et le processus, ce que vous pouvez avoir c'est la même information, l'information PID. Vous pouvez maintenant, en utilisant l'on-exit method, pour le processus d'end, facilement, en utilisant un futur compatible. Et maintenant, si vous voulez, pour le processus d'end, avant de continuer votre travail, vous pouvez juste utiliser quelque chose comme ça, pour exemple, ou ce que vous voulez. Et là-bas, vous pouvez faire du travail. Vous pouvez faire du travail. Le processus va toujours continuer. Et quand votre travail est terminé, vous pouvez juste attendre ici. Vous pouvez faire des choses en java. D'autres choses, c'est quand vous commencez un processus, du processus, vous avez créé, vous pouvez voir les enfants. Donc non, ce n'est pas ce processus. Donc non, si vous lancez, si vous lancez une application ou quelque chose, vous pouvez juste vous pouvez juste entendre, vous pouvez juste savoir ce que vous avez juste launché. Et ça, c'était vraiment difficile de le faire avant, parce que vous avez besoin d'une commande spécifique pour obtenir la ppid de la commande, et ensuite, vérifier que la ppid matche avec la ppid de votre processus. Et ce n'est que pour Linux. Donc si vous utilisez Windows, je ne sais pas. Et le même, maintenant, vous pouvez avoir tout le processus, vous pouvez avoir accès à tout le processus. Donc si vous voulez faire navigation sur tout le processus, vous pouvez vérifier ce qu'il y a, ou quelque chose. Donc tout cet annoncement est vraiment bien, je pense, pour ça. Qu'est-ce que j'ai fait? Qu'est-ce qui s'est passé? C'est pour l'application du processus. Il y a aussi un nouveau API de HTTP. Si vous avez toujours essayé d'utiliser les autres API de HTTP, j'espère que vous allez changer d'une libraire, parce que c'est vraiment grave. Qu'est-ce que j'ai fait? Qu'est-ce que j'ai fait? Ok, vous devez ouvrir une connecte. Et ensuite, vous devez faire des choses comme ça. Ok, ce n'est que si vous faites, pour exemple, un post-request, vous devez passer des données et vous devez passer des données. Vous devez utiliser stream, encore. Et pour utiliser stream, vous ne vous entendrez pas pourquoi beaucoup de choses. Ok, pourquoi pas? Vous devez ouvrir les pièces. Ok. Donc, vous google. Et la même chose pour l'answer. Vous devez envoyer la request. Et pour ne pas avoir la request, vous devez utiliser buffer, reader, stream reader. Ok. C'est vraiment compliqué. L'autre chose c'est que le premier HTTP client, le vote, était écrit pour la première version de Java, dans 97, quelque chose comme ça. Et ce n'était pas design pour l'HTTP. C'était design pour beaucoup de protocoles. Donc, c'est pourquoi c'est tellement compliqué. Et c'est pourquoi le vote, une nouvelle version, parce que tous les autres protocoles qui étaient targetisés au début, ont juste disparu de leur propre libraries. Pour l'utiliser, vous devez l'utiliser d'abord pour les requiers, pour les requiers. Et si vous le voyez, le nom de package est un bitware. C'est utilisé en JDK, en Kubernetes. Cela signifie que c'est expérimental. Donc, si vous voulez l'utiliser, vous pouvez, mais il y aura une relance. Donc, en Java 10, l'appli peut changer. Donc, vous pouvez l'utiliser, mais vous devez juste s'occuper de cela. Http, où est-ce ? Ici. Donc, vous devez créer un client Http. Vous avez accès à ça. Http Client. Et vous pouvez juste créer un client. Et avec le client Http, vous pouvez juste envoyer un requiert. Donc, un requiert qu'est-ce qu'il veut ? Un requiert Http. C'est bien. Maintenant, il fait très facile. Vous avez un requiert, vous avez une réponse. Vous avez l'objet qui correspond à ça. Donc, vous pouvez juste créer le requiert. Donc, c'est utilisé pour les constructeurs. Cela signifie que c'est dynamique. Vous pouvez créer part du constructeur et ensuite, ajouter des idées pour celui-ci. Vous pouvez juste changer dynamiquement le type de requiert. Pour l'instant, ici, je peux juste décider que c'est un requiert. Ici, vous devez ajouter l'URA. Pour l'instant, ici, je veux appeler Google. Allez. Et c'est tout. Ici, vous avez créé un requiert et vous comprenez ce que vous créez. Si vous voulez ajouter des idées, vous pouvez. Vous pouvez juste cliquer les idées et OK, la valeur que vous voulez. Donc, il y a une valeur. C'est bon. Donc, vous passez le requiert ici et les autres paramètres sont comment vous voulez terminer la réponse. Donc, vous avez directement de multiples implementations donc, basiquement, un requiert, un filet ou quelque chose. Donc, je vais juste utiliser ici un requiert. OK. Et ce requiert, une réponse HTTP. OK. Des choses que je comprends. Et de cette réponse, je peux juste obtenir le corps. Donc, c'est quelque chose qui est vraiment facile à faire et quelque chose que vous comprenez. Ici, le corps. OK, je vais essayer. OK. OK. Donc, maintenant, vous avez un client HTTP qui est vraiment facile à utiliser et qui est créé pour utiliser avec HTTP2. Et après ça, OK, c'est tout. OK, maintenant, c'était tout. Parce que Jigsaw a été délaié un peu. Mais, grâce à ces délais, ils ont ajouté beaucoup de features dans le JDK. Ils n'ont pas eu de délaié toutes les autres features qu'ils pouvaient mettre directement dans le Java 9. Donc, grâce à Jigsaw, nous avons beaucoup de features qui nous intéressent beaucoup plus pour les développeurs. Parce que, pour les développeurs, peut-être que Jigsaw n'est pas assez intéressant. OK, vous pouvez créer des modules. OK. Ça ne change pas comment vous créez. Parce que ce n'est pas important et pour ça, Java 9 n'est pas vraiment une bonne version. Parce que ça ne change pas comment vous créez aujourd'hui. Donc, il y a quelques choses qui sont, je pense, assez cool. Le premier est les streams réactifs. Donc, si vous avez entendu sur Spring 5, ils vous permettent de faire des streams réactifs, des choses réactives. Et si vous savez un peu de JavaScript, vous pouvez avoir entendu sur les observables, ou quelque chose comme ça. Les streams réactifs sont juste un standard offert par le JDK pour créer vos propres observables mécanismes. Donc, c'est assez important pour imprimer quelque chose qui s'appelle une pression basse. Donc, c'est quelque chose pour vous donner le contrôle sur combien de éléments vous pouvez entendre. Donc, pour l'instant, ici, j'ai créé un subscriber avec les méthodes que vous pouvez trouver pour les mécanismes publiés, comme sur Next, On Error et On Complit. Et de là, vous allez commencer à dire ce sont combien de éléments que je peux entendre. Si vous ne faites pas ça, pour l'instant, si vous faites ça, vous n'aurez rien reçu. Pour l'instant, si je commence, j'ai la souscription, mais je n'ai rien reçu. Ici, vous voyez, je n'ai rien reçu. Mais si je retire ceci, je n'ai rien reçu. Donc, c'est ce qu'on appelle un mécanisme de pression basse. C'est pour donner l'implementation, le contrôle sur combien de éléments vous pouvez entendre. Et ce qui est très important, parce que si vous ne faites pas ça, ça ne marche pas. Et la même chose, pour que si vous recevrez un élément, vous devez dire je n'ai pas reçu un élément. Maintenant, je peux entendre si vous ne faites pas ça, c'est le même. Vous voulez recevoir plus d'éléments. Un autre problème, c'est que les lignes sont, par défaut, synchronisées. Donc, pour l'instant, si vous n'avez pas reçu quelque chose comme ça, à la fin, vous verrez un truc. Parce que, c'est un élément, et puis, le JVM s'est arrêté et vos abonnés pour juste entendre l'élément. Donc, juste soyez attention, les lignes, même si elles ne se sentent pas comme ça, il y a quelque chose à être synchronisé. C'est vraiment important. Blah, blah, blah, ok, l'implementation, il y a l'axe Java, il y a l'axe anything, et l'axe Streams. Les collections, il y a quelques improvements sur les collections, et ceci est vraiment cool, parce que, la plupart du temps, quand vous voulez créer, par exemple, un liste, si vous voulez créer un liste, vous devez commencer avec un arrêt, ok, ou vous pouvez juste faire Add, Add, Add, mais la plupart du temps, vous devez le faire en ligne, parce que vous voulez juste mettre deux lignes, vous ne voulez pas écrire 10 lignes, juste pour créer deux lignes. Donc, ce que vous faites, c'est juste, ok, vous utilisez un liste, ou vous utilisez cette notation. Ceux-ci sont mauvais, si vous essayez de créer des sets modifiables, notre liste, et vous utilisez Stream.off, et pour les maps, vous pouvez le faire. Donc, maintenant, avec Java 9, vous avez off, pour aucun type, vous avez Set.off, ok, vous créez un set avec 1-2-3, vous avez List.off, le même, 1-2-3, ok, et vous avez Map.off, où vous pouvez ajouter qui, oups, oups, et Value, et so on, et so forth. Une chose, pour noter, cela crée des collections immutables. Donc, quand ils sont créés, vous pouvez faire quelque chose comme Add.put, si vous faites ça, il va falloir. Ok, non, vous ne pouvez pas le modifier. C'est vraiment en train d'être immutable. Mais si vous voulez terminer, vous pouvez juste créer une nouvelle liste, avec la liste que vous avez créée avant, et ajouter tous les éléments. Parce que, quand vous créez une liste statiquement, la plupart des temps, c'est quelque chose qui sera utilisé directement, ou d'autres listes. Les valeurs que vous savez, et cela sera utilisé plus tard. Donc, si la chose immédiate est une issue pour vous, il y a des moyens pour le faire fonctionner. Et la dernière chose, c'est ici que vous êtes limités à 9 éléments, je pense. Donc, si vous avez besoin d'autres éléments, vous pouvez utiliser Map.off, et juste créer l'entrée comme ça. Et créer l'entrée que vous avez besoin. Donc, vous avez besoin d'aider les valeurs. Il y a aussi de nouvelles features avec des streams. Ce sont différents des streams rectifs. Donc, une chose qui a été faite, imaginez que vous avez un stream comme ça. Vous pouvez trouver une condition pour acheter des éléments jusqu'à les 5 éléments, les valeurs 5. Je sais l'ordre. Mais si je ne sais pas l'ordre, je ne peux pas. Il n'y a pas de condition pour arrêter un stream. Donc, Java 9 nous donne avec la méthode take while, l'obligation de faire ça. Et basiquement, ici, vous avez dit que je veux tous les éléments qui sont sous les 5. Et puis, je ne veux pas détenir les éléments. Donc, ici, vous allez avoir 1, 2, 3, 5, et c'est tout. Et Juste vérifier ce qui fonctionne. Donc, ici, je dois avoir 1, 2, 3. Parce que cette condition. Et vous pouvez faire le même dans l'autre façon. Donc, vous pouvez juste échapper les éléments jusqu'à la condition mette. Donc, c'est appelé drop while. Et c'est la même chose. Et basiquement, je pense que l'obligation de take while était l'un des plus quotients dans Java 9. My cursor. Another thing is with Java 8, we have something called iterate to give us an infinite stream of elements. But you have no way to stop it. You can just limit the number of elements you want. So, you say here, ok, I want 10 elements. But that's all. If you want to wait for a specific value, ok, you have to find a way to implement that yourself. Now, there is a second method, still iterate. And here, you just pass the condition. For instance, like this. And now, the stream will stop when the condition is met. This is really like a 4. 4, 1, 2, this step. So, the reliability is the same. Another thing, but this one about optional. Sometimes you want to fetch value from different services, but you never know when you get value. So, you use optionals. But then, you want to keep to take the first element that you got. So, for that, there are multiples as well. The first one is to use stream.off So, and just listen for the optional is present. If the element is present, ok, I want it. So, I get the value. And I just want the first element. There is also another way using the or else get. But this one needs to do an infinite chain. This is not really good. Now, you can just do, you can just use the or function that will wait for supplier. Return the next supplier. And here, you just return the next supplier and so on and so forth. And this is changeable. And that is really the good thing. And then, you can have multiple providers. And even if you don't know which one will give you the value you are waiting, you have an easy way to find it. What's feeling? Ok, it's supposed to be a function. Another thing is ok, when you have an optional you can run something if there is a value. But how to handle if there is no value. So, if there is no value you have to use if. Ouh, thank you. So now, there is something if present or else. The bad way, they could have provided something like present.ifempt something like this or if not present or something like this to make things changeable. It's not the case. Here, you have no choice. You just use if present or else. And then, here, you just provide two suppliers to handle both cases. This is what will happen if there is a value. This is what will happen if there is no value. And two last things. Now, you can create a stream like an optional. And you can transform an optional to a stream. So now, both can collaborate in a better way. And now, you don't need classes anymore because with interfaces you have public, you have static and now you have private. So don't use classes. Just use interfaces. No, no, I'm joking. As introduced default method, sometimes you add to share a code in all the different methods that you created, but you add no way to share it. And that's why now we have private method to share those codes between methods. And there are a lot of, there are more things. Ok, I want to introduce everything. The ad-deprecated has been invité. Now you can add parameters to indicate from where to where. The trial with resource will auto-close services that implement auto-closable. So you don't need to do finally anymore where you check the things it has been created, you just pass it and it will be auto-closed. So this is to navigate through the stack when you have an error. So now you have something that you can use with streams. So you have a stream and you can navigate through the stack. You have HTML5. Also introduce the underscore. No underscore is a keyword. It's if you have a lambda and you don't care about the parameter just use underscore. Like in many languages. You don't care about the parameter you put an underscore. This is the same. We discussed about it just before. So GE1 is now the default garbage collector. I think it was there since Java 6. 7? Ok. So it was like you said you can directly use it with Java 8 if it works. You have GIMH. That is a Java micro benchmarking Something that is really wonderful. Now you can create properties files with UTF-8. So we waited like 20 years for that. That's crazy. 20 years to handle UTF-8. Ok. Nobody cares because everybody is using spring and it's not an issue. A new versioning mechanism. Before Java 9. So the version was 9.8. Something. And the something was computation with if it's security versions and add a multiple of 5. It's a patch version but it's odd then add 2 but it's just odd. Just add what? So now you have just 3 numbers. The first one is major. The second one is minor. And the last one is security. And that makes things easier. Another thing I didn't put here is the multi-jar release. So this is mainly for libraries maintainers. It's a way for you to create multiple classes the same class with the same name but targeting a different JVM. So for instance in library you don't want to write everything. You just want to write a specific class for Java 9 then you can say ok this class will be run only for JVM for the JVM and Java 9. And this is using a specific class loader you can find information on Maven. To take a look this is the link to get all the jabs. This is the link to the slides. Here it's 2017 because I gave a talk in 2015. No 16 at the beginning no 16. And thank you all. Any question? I find underscore is a bit weird way of I mean don't you think that it will impact the rateability or sort of the thing? Ok in JavaScript I use that a lot. Even in Go in Go you know you can skip this because in Go you can return multiple values. So sometimes you just don't care about the first values. You just want to check the error and then you put underscore. So for me it's not an issue. I use that in many languages. But for people that are not used to maybe at the beginning it will be like what the fuck is underscore. It's also the default in Kotlin and Scala. I think that you will find that in almost all languages. So considering that's interesting but the other thing is like the way the j shell has come into picture now do you think they are like trying to say that Java can also act as a scripting language to just write something in? Yeah maybe. I think they want to just target new people because for anybody that know Java basically they want to use j shell. Everything is set up it will be faster to just create a new main run it from the main then going to the j shell. That's when you don't know Java and you don't care about Java C or you have to you know because in Java you have to create packages and at the beginning of the file you have to put the right packages but when you start Java you don't understand this it's like what the fuck why am I doing this so I just want to run 1 plus 1 so I think for new people it's really good and any languages it's on a shell where you can just do some tests you can just import a library and just play with that library for this use cases I think it's really cool you just give the jar and you play with the jar that's for me it's really interesting yep I saw you showed the Java shell from utility I was fix the project class path when you go launch the change I don't know I didn't try I think that would be like not so much for beginner but I think it could be cool that if you want to try something just creating and then make just run the shell yeah I think it could be cool that from the project you pass all the class paths including your code and the jars and then you do some tests from there and I think for Integer it's not that hard to do ok maybe it's really hard to do I think that the shell is there they have all the class paths so no maybe I should call that module pass and I give that to the giving that to the shell I think it's not that hard I think but not working with the intelligently actually it was quite amazed by like the way now interface definitions are changing version by version considering now private methods have also come so I mean they are like the definition of a class versus a interface is also like it's in a way I would say yeah basically yeah and more with that is with spring especially with spring data you create a method and depending on the name of the method you try some code so yeah the interest of classes is decrease the bit but still you don't have the protected modifier and can you create I don't remember I can create properties interface I'm not sure you can yeah you still have limitations so there is still an interest to use classes and basically you should only use interfaces to expose something used by other people you should not put that much code I think for me it's not that good to allow people to put code in interfaces it's ok in my opinion but I don't like this feature and now they need to add more and more things to interfaces just because they allowed people to write code in interfaces so maybe that means in the future they will keep adding things in interfaces because ok now there are private methods ok but there is that use case that we want you to handle because it's just a mess we want to create a specific property for that use case so please handle this and ok yeah interfaces are looking more and more like classes I think it's not the good thing and I don't really like writing code in interfaces I really try to avoid this yep yep yeah I tried that but one year ago so I don't remember anything I'm sorry yeah it was really easy to use I don't remember I had no issue with it and I was able just to run little benchmarks really fast but I don't even remember what I bought I think I have some code somewhere in Github but now I cannot remember yep I was just about to ask like any other new collections being introduced in Java 9 I have not heard about that no what I didn't talk is there are a lot of string improvements that have been done they changed the size of strings of characters in strings they really did a lot of improvements for strings they really did a lot of improvements for unicode support for security they removed a lot of old tools that you can find in a bin directory that either are not used anymore or either need to be used now now you have tools like J-Link J-Depth to get dependencies for your modules something like this J-Link is for creating JRE depending on your code they really before the delay that much before the delay that much Java 9 it was really focused around Jigsaw and it was not that interesting for developers the improvements they did on strings mainly that's interesting ok thank you