X
xhi2018
Gast
Hallo,
ich hab hier diese Klasse bei der ich die equals Methode implementiert habe. Ich hab das eine oder andere darüber gelesen und wollte mal wissen, wie Ihr - mit mehr Praxiserfahrung das so hand habt.
Die
die ich verwende sind natürlich auch vorhanden - hab ich mir hier aber gespart. Ich hab die
Methode einmal überschrieben und dann nochmals etwas anders als
implementiert.
Hier hab ich gelesen, das bei Objekten welche direkt von
ableiten nicht
verwendet werden sollte, weil dies nicht sicher ist, zumindest verstehe ich den Artikel so. Aber wenn ich mir die Implementierung von
ansehe, dann steht da
also doch nix anderes wie in meiner
Methode?
Und noch eine Frage zur Typ-Prüfung lieber
oder so
Wie würdet Ihr das in dem konkreten Fall machen?
Hier noch der JUnit Test dazu...
viele Grüße und schon mal danke für Eure Antworten!
ich hab hier diese Klasse bei der ich die equals Methode implementiert habe. Ich hab das eine oder andere darüber gelesen und wollte mal wissen, wie Ihr - mit mehr Praxiserfahrung das so hand habt.
Java:
public class MyMitarbeiter extends Object implements Comparable<MyMitarbeiter> {
private final Long persID;
private String firstName;
private String lastName;
public MyMitarbeiter(Long id, String fName, String lName) throws IllegalArgumentException {
if ( id == null ) {
throw new IllegalArgumentException("fehlerhafter Konstruktoraufruf - Personal-ID ist [ " + id);
}
if ( fName == null ) {
throw new IllegalArgumentException("fehlerhafter Konstruktoraufruf - Personal-ID ist [ " + fName);
}
if ( lName == null ) {
throw new IllegalArgumentException("fehlerhafter Konstruktoraufruf - Personal-ID ist [ " + lName);
}
this.persID = id;
this.firstName = fName;
this.lastName = lName;
}
@Override
public boolean equals(final Object other) {
if ( super.equals(other) ) return true;
// if ( other == null ) return false;
if ( ! (other instanceof MyMitarbeiter) ) return false;
return isEqual( (MyMitarbeiter) other );
}
public boolean equals2(final Object other) {
if ( this == other ) return true;
if ( other == null ) return false;
if ( this.getClass() != other.getClass() ) return false;
return isEqual( (MyMitarbeiter) other );
}
private boolean isEqual(final MyMitarbeiter otherMa) {
if ( ! (this.getLastName().equalsIgnoreCase(otherMa.getLastName())) ) {
return false;
}
if ( ! (this.getFirstName().equalsIgnoreCase(otherMa.getFirstName())) ) {
return false;
}
if ( ! (this.getPersID().equals(otherMa.getPersID())) ) {
return false;
}
return true;
}
Code:
getter
Code:
.equals(Object o)
Code:
.equals2(Object o)
Hier hab ich gelesen, das bei Objekten welche direkt von
Code:
Object
Code:
super.equals(Object o)
Code:
Object.equals(Object o)
Java:
public boolean equals(Object obj) {
return (this == obj);
}
Code:
equals2(Object o)
Und noch eine Frage zur Typ-Prüfung lieber
Java:
if ( other == null ) return false;
if ( this.getClass() != other.getClass() ) return false;
Java:
if ( ! (other instanceof MyMitarbeiter) ) return false;
Hier noch der JUnit Test dazu...
Java:
public class MyMitarbeiterTest {
MyMitarbeiter testMaOne;
MyMitarbeiter testMaTwo;
MyMitarbeiter testMaThree;
@Before
public void setUp() throws Exception {
testMaOne = new MyMitarbeiter(new Long(100), "VorEins", "NachEins");
testMaTwo = new MyMitarbeiter(new Long(200), "VorZwei", "NachZwei");
testMaThree = new MyMitarbeiter(new Long(300), "VorDrei", "NachDrei");
}
@Test
public void testEquals() {
MyMitarbeiter tmpMaOne = new MyMitarbeiter(new Long(300), "VorDrei", "NachDrei");
assertFalse("warum ist das gleich...?", testMaOne.equals(null));
assertFalse("warum ist das gleich...?", testMaOne.equals(testMaTwo));
assertTrue("warum nicht gleich...?", testMaOne.equals(testMaOne));
assertTrue("warum nicht gleich...?", testMaThree.equals(tmpMaOne));
}
@Test
public void testEquals2() {
MyMitarbeiter tmpMaOne = new MyMitarbeiter(new Long(300), "VorDrei", "NachDrei");
assertFalse("warum ist das gleich...?", testMaOne.equals2(null));
assertFalse("warum ist das gleich...?", testMaOne.equals2(testMaTwo));
assertTrue("warum nicht gleich...?", testMaOne.equals2(testMaOne));
assertTrue("warum nicht gleich...?", testMaThree.equals2(tmpMaOne));
}
}
viele Grüße und schon mal danke für Eure Antworten!
Zuletzt bearbeitet von einem Moderator: