equals (Override) mit eigener Exception (keine Runtime-Exception)

iTobi97

Aktives Mitglied
Hallo liebe Community,
ich studiere seit kurzem Informatik an einer Hochschule, in den ersten Semestern programmieren wir unter anderem in Java. Bei der neuesten Aufgabe ist bei mir eine Frage aufgetreten, auf die ich bisher keine Antwort im Internet gefunden habe: Wenn ich in einer Klasse die equals-Methode überschreibe (@Override), möchte ich gerne eine eigene Exception (keine Runtime-Exception und auch nicht von Runtime-Exception geerbt) werfen können. Der Eclipse-Compiler meldet sich da allerdings mit mehreren Fehlermeldungen:

- Exception AlreadyExistingObject is not compatible with throws clause in Object.equals(Object)
- Syntax error on token "throws", @ expected after this token
- Syntax error, insert "SimpleName" to complete ClassType
- Syntax error, insert "SimpleName" to complete ClassType
- overrides java.lang.Object.equals
- Exception AlreadyExistingObject is not compatible with throws clause in Object.equals(Object)

Die Signatur meiner Funktion sieht folgendermaßen aus:
@Override
public boolean equals(Object compareTo) throws AlreadyExistingObject() {
....
}

Die Signatur meiner Exception:
public class AlreadyExistingObject extends Exception {
}


Ich habe das ganze mit einer Runtime-Exception probiert, mit der scheint das ganze auch zu funktionieren (insbesondere da Runtime-Exceptions ja unchecked Exceptions sind und nicht in der Signatur mit throws angegeben werden). Ich möchte meine equals-Methode mit einer eigenen Exception überschreiben (die nicht von RuntimeExceptions erbt). Ich hoffe, jemand kann mir hierbei weiterhelfen.

Das ist meine erste Frage in diesem Forum, ich hoffe also ich stelle eine nicht zu blöde Frage, oder verstoße gegen irgendwelche Forumsrichtlinien.

Vielen Dank schon einmal im Voraus.
VG
 
@mrBrown, danke das mit den Klammern war schon einmal ein guter Tipp, das mache ich leider noch häufig falsch.
Die Fehlermeldung sieht nun nur noch folgendermaßen aus:
- Exception AlreadyExistingObject is not compatible with throws clause in Object.equals(Object)
- overrides java.lang.Object.equals
Ich muss dir allerdings zustimmen, dass ich das schon vermutetet hatte, da sich ja die Signatur der equals-Methode ändern würde. Mir ist nun allerdings nicht klar, wie ich diese Aufgabe realisieren soll, ohne eine Runtime-Exception zu werfen. Es ist nicht zwingend nötig eine eigene Exception zu verwenden, nur darf die verwendete Exception (auch bereits vordefinierte) nicht von RuntimeExceptions erben. Und da (soweit ich weiß) nur RuntimeExceptions ohne Deklaration in der Signatur möglich sind, habe ich keine Ahnung, wie ich nach der Aufgabenstellung das Problem lösen soll.
 
Es ist nicht zwingend nötig eine eigene Exception zu verwenden, nur darf die verwendete Exception (auch bereits vordefinierte) nicht von RuntimeExceptions erben. Und da (soweit ich weiß) nur RuntimeExceptions ohne Deklaration in der Signatur möglich sind, habe ich keine Ahnung, wie ich nach der Aufgabenstellung das Problem lösen soll.
Ohne die Aufgabenstellung zu kennen können wir dir da auch nicht helfen 😉
 
Ich weiß nicht, ob ich Ärger bekomme, wenn ich die Aufgabe online stelle, daher in etwas abgeänderter Form:
...Überschreiben Sie die equals-Methode des Klasse sinnvoll. Wenn ein Objekt hinzugefügt werden soll, das es bereits gibt, soll hier eine Exception (keine RuntimeException!) mit sinnvoller Fehlermeldung geworfen werden.
 
Für mich liest sich das wie zwei getrennte Aufgabenteile.

equals ganz normal überschrieben, ohne Exception (die gegen den Contract verstoßen würde), und da wo equals genutzt wird im entsprechenden Fall die Exception werfen.
 
Das ist vermutlich dann tatsächlich die einzig mögliche Lösung. Ich werde das dann auf diese Weise noch einmal probieren. Vielen Dank für die Hilfe. Nur kurz eine Frage rein aus Interesse, ich habe schon einmal von Reflections gehört, und dass man damit eigentlich alle Objekte fast beliebig manipulieren kann, müsste es mit soetwas möglich sein, die Signatur (der erbenden Klasse) beim Überschreiben zu verändern?
 
Das ist vermutlich dann tatsächlich die einzig mögliche Lösung. Ich werde das dann auf diese Weise noch einmal probieren.
Es ist nicht nur die einzig richtige Lösung, sondern deine Interpretation der Aufgabe ist vermutlich Humbug 😉

Nur kurz eine Frage rein aus Interesse, ich habe schon einmal von Reflections gehört, und dass man damit eigentlich alle Objekte fast beliebig manipulieren kann, müsste es mit soetwas möglich sein, die Signatur (der erbenden Klasse) beim Überschreiben zu verändern?

Ja, ist möglich.
Und Nein, das möchtest und solltest du nicht machen.
 

Zurück
Oben