Skip to content

Commit 55e3787

Browse files
committed
Add instanceof pattern matching (Java 16)
1 parent 35c0eef commit 55e3787

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

chapters/chapter-1.adoc

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,31 @@ if (a instanceof ArrayList) {
219219
// ... // <1>
220220
}
221221
----
222-
223222
<1> l’execution entrera dans le bloc si l’objet pointé par la variable `a` est de type `ArrayList` ou d’un sous-type d’ `ArrayList`
224223

224+
Classiquement, tester le type d'une variable est suivi par un *cast* :
225+
226+
[source,java]
227+
----
228+
void callBarkIfPossible(Animal animal) {
229+
if (animal instanceof Dog) {
230+
Dog dog = (Dog) animal; // <1>
231+
dog.bark();
232+
}
233+
}
234+
----
235+
<1> Ce type de *cast* est appelé *downcasting* (passage d'un type parent à un type enfant)
236+
237+
A partir de Java 16 l'opérateur `instanceof` peut prendre une opérande supplémentaire afin d'obtenir directement une variable du type testé :
238+
[source,java]
239+
----
240+
void callBarkIfPossible(Animal animal) {
241+
if (animal instanceof Dog dog) {
242+
dog.bark();
243+
}
244+
}
245+
----
246+
225247
=== Nommage
226248

227249
Le nommage a un intérêt prépondérant dans le paradigme objet où le développeur essaie d’exprimer des concepts réels.

0 commit comments

Comments
 (0)