Comme il était énoncé dans la fin de la dépêche sur OpenJDK 13. La prochaine version du langage le plus utilisé du monde®, les NullPointerExceptions seront plus détaillées afin d’aider le développeur à trouver où ses doigts ont fourché.
Les détails sont à lire dans la JEP 358 dont j’ai extrait deux exemples :
For example, an NPE from the assignment statement a.i = 99; would generate this message:
Exception in thread "main" java.lang.NullPointerException:
Cannot assign field 'i' because 'a' is null.
at Prog.main(Prog.java:5)If the more complex statement a.b.c.i = 99; throws an NPE, the message would dissect the statement and pinpoint the cause by showing the full access path which led up to the null:
Exception in thread "main" java.lang.NullPointerException:
Cannot read field 'c' because 'a.b' is null.
at Prog.main(Prog.java:5)
Le bémol c’est que Java 14 ne sera pas une LTS, la prochaine est la 17 il me semble. Ce n’est donc pas demain la veille que la plupart des développeurs profiteront de cette évolution.
# Pas demain la veille
Posté par Colin Pitrat (site web personnel) . Évalué à 3.
Il suffit de compiler et tester avec les deux versions.
# Pendant ce temps, à Saint-Pétersburg...
Posté par Spyhawk . Évalué à 2.
… Kotlin évite le problème entièrement en implémentant Null Safety tout en étant entièrement compatible avec Java.
[^] # Re: Pendant ce temps, à Saint-Pétersburg...
Posté par Dring . Évalué à 2.
D’ailleurs c’est bien dommage que Java ne s’inspire pas de Kotlin sur cette partie.
[^] # Re: Pendant ce temps, à Saint-Pétersburg...
Posté par SpaceFox (site web personnel, Mastodon) . Évalué à 1. Dernière modification le 30 septembre 2019 à 12:09.
Ils ne peuvent pas à cause de la Sainte Compatibilité :(
La connaissance libre : https://zestedesavoir.com
[^] # Re: Pendant ce temps, à Saint-Pétersburg...
Posté par barmic 🦦 . Évalué à 4.
Je ne dirais pas qu'il évite entièrement le problème. Il donne quelques clefs très utile mais pour supprimer le problème il faut aller plus loin que ça. D'ailleurs le liens que tu donne explique dès le début qu'ils n'ont pas supprimé le problème.
La seule façon de supprimer le problème (que je connaisse), c'est de supprimer les valeurs null du langage. Si tu veux représenter du vide tu dois utiliser un type
MonType|Nothing
et vérifier le type à chaque usage dangereux.https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Pendant ce temps, à Saint-Pétersburg...
Posté par SpaceFox (site web personnel, Mastodon) . Évalué à 5.
C'est à peu près ce que propose Kotlin : en supposant que
Nothing
soit représenté parnull
, si tu veux représenter du vide tu dois utiliserMonType|null
(ce qui s'écritMonType?
en Kotlin) et faire la vérification à chaque usage dangereux.La connaissance libre : https://zestedesavoir.com
[^] # Re: Pendant ce temps, à Saint-Pétersburg...
Posté par Ruminant . Évalué à 1.
Utiliser Optional peut être une… option :) https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Optional.html
[^] # Re: Pendant ce temps, à Saint-Pétersburg...
Posté par SpaceFox (site web personnel, Mastodon) . Évalué à 6.
C'est beaucoup plus lourd, et Optional n'est pas prévu pour être utilisé dans ce but. Cf cet ensemble de règles et cet article.
La connaissance libre : https://zestedesavoir.com
[^] # Re: Pendant ce temps, à Saint-Pétersburg...
Posté par barmic 🦦 . Évalué à 2.
Oui et non. Pour avoir utiliser kotlin et elm l'usage est vraiment différent. Rien que l'existence de l'opérateur
!!
montre que le problème n'est pas totalement résolue. NPE est une exception runtime, quand tu utilise tu délègue à quelqu'un d'autres gestion de l'absence de valeur sans lui dire.C'est déroutant de voir ces langages sans valeur
null
qui ont complètement supprimé ce forme d'erreur (elle n'est pas représentable dans le langage), mais des fois c'est super agréable.https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Pendant ce temps, à Saint-Pétersburg...
Posté par SpaceFox (site web personnel, Mastodon) . Évalué à 6. Dernière modification le 30 septembre 2019 à 17:08.
Ben ils tournent sur la JVM avec possibilité d'appeler du Java de façon transparente, donc ils sont obligés de gérer le problème.
Mais tant que tu restes dans du pur Kotlin propre, ça fonctionne.
La connaissance libre : https://zestedesavoir.com
[^] # Re: Pendant ce temps, à Saint-Pétersburg...
Posté par barmic 🦦 . Évalué à 2.
Ah mais je n'ai jamais dis qu'il n'y avait pas de bonne explication. C'est juste le « ils ont complètement supprimé le problème » qui m'a fait réagir.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
# Source pour Java 17 en LTS ?
Posté par damaki . Évalué à 4.
J'ai fouiné sur les internets, et la seule référence à Java 17 étant une LTS est sur Wikipedia, et l'info n'est pas sourcée sur Wikipedia. Sur ce que j'ai trouvé sur le site officiel, la Roadmap de support s'arrête à la 13 et je n'ai pas trouvé de vraie roadmap exhaustive.
[^] # Re: Source pour Java 17 en LTS ?
Posté par Nonolapéro . Évalué à 7.
Une LTS sortira tous les trois ans. La dernière LTS est la version 11. Avec deux versions par an, la suivante sera la 17.
[^] # Re: Source pour Java 17 en LTS ?
Posté par claudex . Évalué à 7.
Un employé Oracle l'a au moins annoncé dans une conf: https://www.youtube.com/watch?v=HqxZFoY_snQ&feature=youtu.be&t=737
Je n'ai pas trouvé d'autres sources de première main.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Source pour Java 17 en LTS ?
Posté par barmic 🦦 . Évalué à 6.
L'employé en question c'est Mark Reinhold chef architect de Java SE (pour ceux à qui ça ne parle pas, il est l'un des 6 du board d'OpenJDK).
Le projet OpenJDK (c'est lui le site officiel) https://openjdk.java.net/projects/jdk/ pointe justement sur un mail de Mark Reinhold qui explique tout le cycle de vie: https://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html
Il dit bien une version LTS tous les 3 ans.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Source pour Java 17 en LTS ?
Posté par BAud (site web personnel) . Évalué à 5.
et c'est lui qui promeut avec efficacité et honnêteté OpenJDK chez Sun^WOracle désormait chaque année au Fosdem depuis 2007
https://archive.fosdem.org/2019/schedule/event/state_openjdk/
le state of OpenJDK est fait avec son collègue de Red Hat (jamais vu celui d'IBM ?)
Je n'ai raté aucune de ses interventions depuis 2007 et je puis témoigner de son implication à ouvrir Java (même si pas professionnellement, n'ayant pas obtenu les confirmations, ni de Red Hat, ni d'IBM, bon Oracle stait mort, zulu est peut-être une piste, nous on a pris adoptOpenJDK…). Certains se souviendront d'un de mes journaux précédents, que je confirme à raison.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.