Anwenden von instanceof
für die Schnittstellenprüfung
In diesem Schritt werden wir untersuchen, wie man das Schlüsselwort instanceof
in Java verwendet, um zu prüfen, ob ein Objekt eine Instanz einer bestimmten Schnittstelle (Interface) ist. Dies ist eine häufige Aufgabe, wenn Sie eine Variable vom Typ einer Basisklasse oder Schnittstelle haben und den tatsächlichen Typ des Objekts bestimmen müssen, auf das sie verweist, insbesondere wenn Sie Methoden aufrufen möchten, die spezifisch für eine bestimmte Schnittstelle sind.
Zunächst definieren wir eine einfache Schnittstelle und eine Klasse, die sie implementiert.
-
Öffnen Sie den WebIDE-Editor.
-
Stellen Sie im Dateiexplorer links sicher, dass Sie sich im Verzeichnis ~/project
befinden.
-
Erstellen Sie eine neue Datei mit dem Namen Printable.java
. Sie können dies tun, indem Sie im Dateiexplorer mit der rechten Maustaste klicken und "Neue Datei" auswählen, und dann Printable.java
eingeben.
-
Öffnen Sie Printable.java
und fügen Sie den folgenden Code hinzu:
package project;
public interface Printable {
void print();
}
Dies definiert eine einfache Schnittstelle namens Printable
mit einer Methode, print()
.
-
Speichern Sie die Datei (Strg+S oder Cmd+S).
Jetzt erstellen wir eine Klasse, die die Printable
-Schnittstelle implementiert.
-
Erstellen Sie im Verzeichnis ~/project
eine neue Datei mit dem Namen Document.java
.
-
Öffnen Sie Document.java
und fügen Sie den folgenden Code hinzu:
package project;
public class Document implements Printable {
private String content;
public Document(String content) {
this.content = content;
}
@Override
public void print() {
System.out.println("Printing Document: " + content);
}
}
Diese Klasse Document
implementiert die Printable
-Schnittstelle und bietet eine Implementierung für die print()
-Methode.
-
Speichern Sie die Datei.
Schließlich erstellen wir eine Hauptklasse, um die Verwendung von instanceof
mit der Schnittstelle zu demonstrieren.
-
Erstellen Sie im Verzeichnis ~/project
eine neue Datei mit dem Namen InterfaceCheck.java
.
-
Öffnen Sie InterfaceCheck.java
und fügen Sie den folgenden Code hinzu:
package project;
public class InterfaceCheck {
public static void main(String[] args) {
Object obj1 = new Document("Important Report");
Object obj2 = "Just a String";
// Check if obj1 is an instance of Printable
if (obj1 instanceof Printable) {
System.out.println("obj1 implements Printable");
Printable p1 = (Printable) obj1; // Cast to Printable
p1.print(); // Call the print method
} else {
System.out.println("obj1 does not implement Printable");
}
System.out.println("---");
// Check if obj2 is an instance of Printable
if (obj2 instanceof Printable) {
System.out.println("obj2 implements Printable");
Printable p2 = (Printable) obj2; // This line would cause a ClassCastException if executed
p2.print();
} else {
System.out.println("obj2 does not implement Printable");
}
}
}
In diesem Code:
- Wir erstellen zwei
Object
-Variablen, obj1
, die auf ein Document
-Objekt verweist (das die Printable
-Schnittstelle implementiert), und obj2
, die auf ein String
-Objekt verweist (das die Printable
-Schnittstelle nicht implementiert).
- Wir verwenden
if (obj1 instanceof Printable)
, um zu prüfen, ob das Objekt, auf das obj1
verweist, eine Instanz der Printable
-Schnittstelle ist.
- Wenn dies der Fall ist, geben wir eine Nachricht aus und casten dann
obj1
in den Printable
-Typ mit (Printable) obj1
. Durch das Casten können wir das Object
als Printable
behandeln und seine print()
-Methode aufrufen.
- Wir führen die gleiche Prüfung für
obj2
durch. Da String
die Printable
-Schnittstelle nicht implementiert, wird der else
-Block ausgeführt.
-
Speichern Sie die Datei.
Jetzt kompilieren und führen wir den Code aus.
-
Öffnen Sie das Terminal unten im WebIDE. Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project
befinden.
-
Kompilieren Sie die Java-Dateien:
javac Printable.java Document.java InterfaceCheck.java
Wenn keine Fehler auftreten, erstellt dieser Befehl die Dateien Printable.class
, Document.class
und InterfaceCheck.class
.
-
Führen Sie das InterfaceCheck
-Programm aus:
java InterfaceCheck
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
obj1 implements Printable
Printing Document: Important Report
---
obj2 does not implement Printable
Diese Ausgabe bestätigt, dass instanceof
korrekt erkannt hat, dass obj1
die Printable
-Schnittstelle implementiert, während obj2
dies nicht tut. Das Verwenden von instanceof
vor dem Casten ist entscheidend, um ClassCastException
-Fehler zur Laufzeit zu vermeiden.