août
2013
Je suis en train de faire des tests avec le JDK 8 b104 et la dernière bêta de NetBeans 7.4 de manière à tester les nouveautés de syntaxe propre au JDK 8. Bien qu’il soit possible d’utiliser le JDK 8 dans NetBeans 7.3.x, la nouvelle syntaxe n’est pas supportée et donc il faut utiliser NetBeans 7.4 bêta.
Aujourd’hui, je testais donc les lambda, ce qui permet de simplifier du code de manière similaire à :
button.setOnAction(new EventHandler() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
// Créer un comparateur de chaines pour trier une liste.
Comparator comparator = new Comparator() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
};
qui devient ceci :
button.setOnAction((ActionEvent event) -> System.out.println("Hello World!"));
// Créer un comparateur de chaines pour trier une liste.
Comparator comparator = (String o1, String o2) -> o1.compareTo(o2);
Note : si vous voyez des « > » dans le code ci-dessus, il faut bien sur le remplacer par un « > ».
De manière générale, le code utilisant les lambda est en effet bien plus concis et lisible.
Cependant, je me suis rendu compte que NetBeans me mettait des indicateurs sur d’autres portions de code, qui contenaient des boucles for(). Ainsi, précédemment, pour tester l’impression dans JavaFX 8 (également une des nouveautés du JDK 8), j’avais du faire des fonctions pour dupliquer un graphe. En effet, à l’impression, je ne manipule pas le graphe source, qui est présent à l’écran, mais une copie qui sera insérée dans la scène à imprimer (le principe est le même lorsqu’on veut exporter en PDF ou en bitmap). Il faut donc s’attacher à copier les series et leur data du graphe source dans un nouveau graphe, ce qui donne quelques chose comme cela :
final LineChart.Data sourceData = (LineChart.Data) d;
final LineChart.Data data = copyData(sourceData);
dataList.add(data);
}
Note : pourquoi ce besoin de caster ? Eh bien, il semble que, dans JavaFX 2.2 du moins, NetBeans ou le compilateur se perd avec le type qui doit être retourné par la méthode getData() de la classe XYChart<X, Y>.Series<X, Y>. En principe, ce devrait être ObservableList<XYChart<X, Y>.Data<X, Y>> mais là franchement l’IDE ou le compilateur perd les pédales et donc il ne voit qu’une ObservableList<Object>… et c’est comme cela à plusieurs endroits dans l’API Chart…
Donc bref, NetBeans 7.4 ajoute un indicateur sur cette ligne disant :
Can use functionnal operations.
Il s’agit d’une proposition d’utiliser la nouvelles API de flux sur les collections. Si on acccepte la modification, notre bloc de code devient alors :
dataList.add(data);
});
Déjà, il a oublie les casts, et donc cela ne compilera pas ; il s’agit peut-etre d’un défaut de cette bêta de NetBeans. Ça se corrige en :
dataList.add((LineChart.Data)data);
});
Là, d’un coup j’ai mal au crâne… Je comprends bien que ce faisant, on est sensé pouvoir potentiellement profiter d’un traitement en parallèle sur chacun des éléments de la collection (si c’est supporté) mais du coup je n’arrive même plus a lire ni à comprendre ce que le traitement fait… Bref, on perd toute la lisibilité de la simple boucle. Bon, j’exagère un peu bien sur, ici le traitement étant hyper simple mais je n’ose pas imaginer les « optimisations » de boucles et traitements plus complexes. ><
I think I am too old for this shit…
Commentaires récents
- Back from the future… dans
- Back from the future… dans
- Static linking = does not Compute dans
- Paquetage x 2 dans
- Why you little… dans