GitLab wurde erfolgreich aktualisiert. Dank regelmäßiger Updates bleibt das THM GitLab sicher und Sie profitieren von den neuesten Funktionen. Danke für Ihre Geduld.

Commit 8c38b239 authored by Dominikus Herzberg's avatar Dominikus Herzberg

Merge branch 'dev-cs' into 'master'

fixes equals implementation for Point, Car and Fraction according to #2

See merge request !4
parents a7b34d34 e7f6ef9d
......@@ -53,6 +53,7 @@ include::{sourcedir}\equals.java[]
----
<1> Da der Parameter von `equals` vom Typ `Object` ist, muss zuerst geprüft werden ob es sich bei dem übergebenen Argument überhaupt um ein Objekt vom richtigen Typ handelt.
<2> Nachdem wir überprüft haben, dass das Objekt den richtigen Typ hat können wir es zu diesem Typ _casten_, um auf die relevanten Felder zugreifen zu können.
<3> Eine Grundregel von Java lautet "Wer `equals` sagt, muss auch `hashCode` sagen.". Überschreibt man die Funktionalität von `equals`, muss man gewährleisten, dass für zwei Objekte für die `x.equals(y)` den Wert `true` ergibt auch `x.hashCode() == y.hashCode()` gelten muss. Eine einfache Lösung dafür ist die Hilfsmethode `hash()` der Klasse `java.util.Objects`. An diese Methode müssen alle Objekte übergeben werden, die bei dem Vergleich relevant sind.
include::postDetails.adoc[]
== Mediaplayer
......
......@@ -6,11 +6,14 @@ class Point {
this.y = y;
}
public boolean equals(Object other) {
if (other instanceof Point) { // <1>
Point otherPoint = (Point) other; // <2>
return otherPoint.x == this.x && otherPoint.y == this.y;
}
return false;
if (other == null) return false;
if (other == this) return true;
if (!(other instanceof Point)) return false; // <1>
Point otherPoint = (Point) other; // <2>
return otherPoint.x == this.x && otherPoint.y == this.y;
}
public int hashCode() {
return Objects.hash(x, y); // <3>
}
}
......@@ -20,11 +23,14 @@ class Car {
this.tachometer = tachometer;
}
public boolean equals(Object other) {
if (other instanceof Car) { // <1>
Car otherCar = (Car) other; // <2>
return otherCar.tachometer == this.tachometer;
}
return false;
if (other == null) return false;
if (other == this) return true;
if (!(other instanceof Car)) return false; // <1>
Car otherCar = (Car) other; // <2>
return otherCar.tachometer == this.tachometer;
}
public int hashCode() {
return Objects.hash(tachometer); // <3>
}
}
......@@ -40,19 +46,26 @@ class Fraction {
this.denominator = denominator;
}
public boolean equals(Object other) {
if (other instanceof Fraction) { // <1>
Fraction otherFrac = (Fraction) other; // <2>
return otherFrac.numerator == this.numerator
&& otherFrac.denominator == this.denominator;
}
return false;
if (other == null) return false;
if (other == this) return true;
if (!(other instanceof Fraction)) return false; // <1>
Fraction otherFrac = (Fraction) other; // <2>
return otherFrac.numerator == this.numerator
&& otherFrac.denominator == this.denominator;
}
public int hashCode() {
return Objects.hash(numerator, denominator); // <3>
}
}
assert !new Fraction(1,2).equals(new Car(123.0));
assert new Fraction(1,2).equals(new Fraction(1,2));
assert new Fraction(1,2).hashCode() == new Fraction(1,2).hashCode();
assert new Fraction(2).equals(new Fraction(2,1));
assert new Fraction(2).hashCode() == new Fraction(2, 1).hashCode();
assert !new Car(12).equals(new Car(12.1));
assert new Car(12).equals(new Car(12.0));
assert new Car(2).hashCode() == new Car(2).hashCode();
assert !new Point(3,4).equals(new Point(4,3));
assert new Point(3,4).equals(new Point(3,4));
assert new Point(3,4).hashCode() == new Point(3,4).hashCode();
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment