Hallo Forum,
dieses mal melde ich mich mit einer etwas konkreteren Frage als das letzte man und sogar mit einem Beispiel. Dafür gibt’s nur nen eher kryptischen Thread-Titel, weil ich mein Problem nicht auf eine Zeile zusammenstampfen kann. Hier also das Problem in seiner ganzen Breite:
Ich schreibe ein Programm, dass sich mit einem Interface der Frima Phidgets verbinden soll, um Messwerte zu erfassen und der Hersteller liefert eine entsprechende API (zum Download). So weit so gut. Das Interface hat nun eine Methode waitForAttachment(int timeOut), die versucht die Verbindung herzustellen und nach timeOut eine PhidgetException wirft, wenn kein Interface gefunden wurde. Damit mein Program auch ohne Interface (quasi im Demomodus) benutzt werden kann, soll die Exception abgefangen werden und dann ein neues Interface-Objekt erzeugt werden, dass die von mir benötigen Methoden simuliert. Hier das Beispiel dazu:
ich glaube, mein Ansatz ist gar nicht so schlecht, das Problem ist nur, dass in der originalen Klasse alle Methoden final sind und ich sie deshalb nicht überschreiben kann. Meine bisherige Lösung war, eine eigene Klasse InterfaceKitPhidget zu schreiben, die alle Methoden hat und um den Demo-Modus zu bekommen den Import von com.phidgets.InterfaceKitPhidget auszukommentieren, so dass meine Klasse benutzt wird. Das ist aber natürlich herzlich wenig dynamisch und ich muss dann immer zwei Versionen kompilieren und verteilen.
Hat jemand eine Idee, wie man das machen könnte? Ich habe natürlich schon gesucht, aber es scheint keine Möglichkeit zu geben, eine finale Methode zu überschreiben, oder?
Vielen Dank!
Tobi
dieses mal melde ich mich mit einer etwas konkreteren Frage als das letzte man und sogar mit einem Beispiel. Dafür gibt’s nur nen eher kryptischen Thread-Titel, weil ich mein Problem nicht auf eine Zeile zusammenstampfen kann. Hier also das Problem in seiner ganzen Breite:
Ich schreibe ein Programm, dass sich mit einem Interface der Frima Phidgets verbinden soll, um Messwerte zu erfassen und der Hersteller liefert eine entsprechende API (zum Download). So weit so gut. Das Interface hat nun eine Methode waitForAttachment(int timeOut), die versucht die Verbindung herzustellen und nach timeOut eine PhidgetException wirft, wenn kein Interface gefunden wurde. Damit mein Program auch ohne Interface (quasi im Demomodus) benutzt werden kann, soll die Exception abgefangen werden und dann ein neues Interface-Objekt erzeugt werden, dass die von mir benötigen Methoden simuliert. Hier das Beispiel dazu:
Java:
import com.phidgets.InterfaceKitPhidget;
import com.phidgets.PhidgetException;
public class IKTest {
InterfaceKitPhidget ik;
public static void main(String[] args) {
}
public void start() {
try {
ik = new InterfaceKitPhidget();
ik.waitForAttachment(5000);
} catch (PhidgetException ex) {
System.out.println("Konnte Verbindung nicht herstellen");
System.out.println("Demo-Modus starten ...");
try {
ik = new InterfaceKitPhidget() {
@Override
Integer getSensorValue(int sensorCount) throws PhidgetException {
return (int) (Math.random() * 1001);
}
// Weitere Methoden
};
} catch (Exception e) {}
}
}
}
ich glaube, mein Ansatz ist gar nicht so schlecht, das Problem ist nur, dass in der originalen Klasse alle Methoden final sind und ich sie deshalb nicht überschreiben kann. Meine bisherige Lösung war, eine eigene Klasse InterfaceKitPhidget zu schreiben, die alle Methoden hat und um den Demo-Modus zu bekommen den Import von com.phidgets.InterfaceKitPhidget auszukommentieren, so dass meine Klasse benutzt wird. Das ist aber natürlich herzlich wenig dynamisch und ich muss dann immer zwei Versionen kompilieren und verteilen.
Hat jemand eine Idee, wie man das machen könnte? Ich habe natürlich schon gesucht, aber es scheint keine Möglichkeit zu geben, eine finale Methode zu überschreiben, oder?
Vielen Dank!
Tobi
Zuletzt bearbeitet von einem Moderator: