Java equals Funktion im Konstruktor - wie richtig?

achso sry hab nicht gesehen dass das bei ihm kein object im argument war...
NullPointer hat das sehr schön geschrieben...einfach kopieren und fertig bist du...
einfach noch überlegen wann das so ist...das mit der geraden natürlich auch mitberücksichtigen und vor allem ist | ein bitweises OR und || das logische oder
 
Die Fläche eines Dreiecks ist auch 0, wenn alle drei Punkte auf der selben Geraden liegen ... :)

Code:
if((p1.getX() == p2.getX() && p1.getY() == p2.getY()) ||
    p3.getY() == (p1.getY() - p2.getY()) / (p1.getX() - p2.getX()) *
    (p3.getX() - p1.getX()) + p1.getY())
        // throw Exception(...)
 
es geht allgemeiner und einfacher...

Du nimmst dir paar variablen die immer in deine Klassen vorkommen (wenn du z.B. diese Klasse als Abstract benutzen willst musst du so machen) überschreibst die Methode, gethashcode und vergleichst die Hashcodes des eigenen Objects mit dem Hashcode des others. Meine Variante ist dann sicherer, falls du die Klassen vererben willst!

Code:
public override int GetHashCode()
{
    return this.p1.GetHashCode() | this.p2.GetHashCode() | this.p3.GetHashCode();
}

public override Boolean Equals(Object obj)
{
    ///Achtung, hier muss geprüft werden ob obj nicht null ist, sonst kriegst 
    ///du NULL Pointer Exception weiter unten.
    if(obj == null)
        return false;
    if(this.GetHashCode() == obj.GetHashCode())
        return true;
    return false;
}


Am besten solltest du auch die Klassenname in den HashCode einbinden, dann bist du auf der sichere ebene. Ich habe mir was ähnliches selbst Programmiert, da ich Listen vergleichen Musste und weil viele (verschiedene) Objekte von meine Abstract Klasse geerbete haben. Um den Name der Klasse heraus zu finden, habe ich die Refecltion von .NET benutzt. Bei Java musst du halt anderen Weg finden, falls es keine Reflection gibt.
 
Zurück
Oben