Bonjour,
Je vous propose un nouvel élément à utiliser : Optional... avec quelques features en plus !
Fonctionnalités ajoutées:
- La méthode mapOr()qui permet d'exécuter une méthode sur la valeur contenue ou de renvoyer une valeur par défaut si le conteneur est vide;
- La méthode mapOrElse() qui permet d'exécuter une méthode sur la valeur contenue ou exécuter une méthode par défaut dans le cas où le conteneur serait vide;
- La méthode getOrInsert() qui permet de récupérer la ressource d'un conteneur ou d'en insérer une s'il était vide tout en récupérant une référence de cette dernière;
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ReferenceHandler <Option<String>> noneOption = new ReferenceHandler<>(new None<>()); final String foo = noneOption.get().getOrInsert(noneOption, "foo"); assertThat(foo, is(equalTo("foo"))); assertThat(noneOption.get().getClass(), is(equalTo(Some.class)));
- La méthode getOrInsertWith() qui permet de récupérer la ressource d'un conteneur ou d'en insérer une par le biais d'une méthode tout en récupérant une référence de cette nouvelle ressource;
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 final ReferenceHandler<Option<String>> noneOption = new ReferenceHandler<>(new None<>()); final String foo = noneOption.get().getOrInsertWith(noneOption, () -> "foo"); assertThat(foo, is(equalTo("foo"))); assertThat(noneOption.get().getClass(), is(equalTo(Some.class)));
- La méthode take() qui permet littéralement de prendre la valeur d'un conteneur et la placer dans un autre, réinitialisant le premier conteneur à None.
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Option<Integer> integer = new Some<>(117); final ReferenceHandler<Option<Integer>> ref = new ReferenceHandler<>(integer); final Option<Integer> anotherInteger = integer.take(ref); assertThat(ref.get(), is(equalTo(new None<Integer>()))); assertThat(anotherInteger, is(equalTo(new Some<>(117))));
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 final Option<Integer>integer = new None<>(); final ReferenceHandler<Option<Integer>> ref = new ReferenceHandler<>(integer); assertThat(integer.take(ref), is(equalTo(new None<>()))); assertThat(ref.get(), is(equalTo(new None<>())));
Utilisation
Il vous faudra utiliser maven 3 pour compiler et construire un jar puis exécuter simplement la commande:
Code Bash : Sélectionner tout - Visualiser dans une fenêtre à part mvn clean install package
Une fois fait, ajoutez le projet dans votre pom.xml:
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- ... --> <dependencies> <dependency> <groupId>fr.songbird.rapi</groupId> <artifactId>RAPI</artifactId> <version>0.1.0-SNAPSHOT</version> <scope>runtime</scope> </dependency> </dependencies> </project>
C'est prêt !
Note: C'est une snapshot mais les outils se trouvant dedans sont totalement stables (l'utilisant moi-même). Si vous avez des suggestions à propos du code (modifications, tricks, ...) n'hésitez pas à me le notifier ici ou vous pouvez également ouvrir une PR par ici.
Note (1): Result n'est pas terminée et ne concerne pas cette contribution.
Qu'en pensez-vous ?
Partager