Gérer les objets nuls et les objets n'implémentant pas l'interface
Dans cette étape, nous allons examiner le comportement du mot-clé instanceof
lorsqu'il est utilisé avec des références null
et des objets qui n'implémentent pas l'interface vérifiée. Comprendre ces cas est essentiel pour écrire un code robuste.
Modifions le fichier InterfaceCheck.java
pour inclure une référence null
et un objet d'une classe qui n'implémente ni Printable
ni Editable
.
-
Ouvrez le fichier InterfaceCheck.java
dans le répertoire ~/project
.
-
Remplacez le code existant par le suivant :
package project;
// Assume Printable and Editable interfaces and Document class are already defined
public class InterfaceCheck {
public static void main(String[] args) {
Object obj1 = new Document("Initial Content");
Object obj2 = "Just a String"; // Does not implement Printable or Editable
Object obj3 = null; // A null reference
Object obj4 = new Object(); // An object that does not implement Printable or Editable
System.out.println("Checking obj1 (Document):");
if (obj1 instanceof Printable) {
System.out.println("obj1 implements Printable");
} else {
System.out.println("obj1 does not implement Printable");
}
if (obj1 instanceof Editable) {
System.out.println("obj1 implements Editable");
} else {
System.out.println("obj1 does not implement Editable");
}
System.out.println("---");
System.out.println("Checking obj2 (String):");
if (obj2 instanceof Printable) {
System.out.println("obj2 implements Printable");
} else {
System.out.println("obj2 does not implement Printable");
}
if (obj2 instanceof Editable) {
System.out.println("obj2 implements Editable");
} else {
System.out.println("obj2 does not implement Editable");
}
System.out.println("---");
System.out.println("Checking obj3 (null):");
if (obj3 instanceof Printable) {
System.out.println("obj3 implements Printable");
} else {
System.out.println("obj3 does not implement Printable");
}
if (obj3 instanceof Editable) {
System.out.println("obj3 implements Editable");
} else {
System.out.println("obj3 does not implement Editable");
}
System.out.println("---");
System.out.println("Checking obj4 (Object):");
if (obj4 instanceof Printable) {
System.out.println("obj4 implements Printable");
} else {
System.out.println("obj4 does not implement Printable");
}
if (obj4 instanceof Editable) {
System.out.println("obj4 implements Editable");
} else {
System.out.println("obj4 does not implement Editable");
}
}
}
Dans ce code mis à jour, nous avons ajouté deux nouvelles variables de type Object
:
obj3
est affectée à null
.
obj4
est affectée à une nouvelle instance de la classe de base Object
, qui n'implémente pas nos interfaces personnalisées.
Nous utilisons ensuite instanceof
pour vérifier chacun de ces objets par rapport aux interfaces Printable
et Editable
.
-
Enregistrez le fichier.
Maintenant, compilons et exécutons le code mis à jour.
-
Ouvrez le terminal dans le répertoire ~/project
.
-
Compilez les fichiers Java. Comme nous avons seulement modifié InterfaceCheck.java
, nous pouvons compiler uniquement ce fichier, mais compiler les trois est également correct :
javac Printable.java Editable.java Document.java InterfaceCheck.java
-
Exécutez le programme InterfaceCheck
:
java InterfaceCheck
Vous devriez voir une sortie similaire à ceci :
Checking obj1 (Document):
obj1 implements Printable
obj1 implements Editable
---
Checking obj2 (String):
obj2 does not implement Printable
obj2 does not implement Editable
---
Checking obj3 (null):
obj3 does not implement Printable
obj3 does not implement Editable
---
Checking obj4 (Object):
obj4 does not implement Printable
obj4 does not implement Editable
Observez la sortie pour obj3
(la référence null
). L'opérateur instanceof
retourne false
lorsque la référence d'objet est null
, quelle que soit le type vérifié. C'est un comportement clé de instanceof
et évite les erreurs NullPointerException
lors de la vérification.
Observez également la sortie pour obj4
(l'objet de type Object
). Comme prévu, puisque la classe Object
n'implémente ni Printable
ni Editable
, les vérifications instanceof
retournent false
.
Cette étape démontre que instanceof
peut être utilisé en toute sécurité avec des références null
et identifie correctement les objets qui n'implémentent pas l'interface spécifiée.