tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
565
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Data1992 Tutorials.de Gastzugang
    Hallo zusammen,
    wahrscheinlich ist die Antwort auf meine Frage ziemlich banal, aber ich sehe den Wald vor lauter Bäumen nicht.
    Wir haben in unserer Vorlesung eine Klasse "Coord" definiert:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    class Coord {
      private int x;
      private int y;
     
      public Coord(int x, int y) {
        this.x = x;
        this.y = y;
      }
     
      public equals(Object value) {
        return x == ((Coord) value).x & y == ((Coord) value).y;
      }
    }

    Diese Klasse wird in einem Programm verwendet. Beim folgenden Aufruf funktioniert die Überprüfung der Strukturgleichheit wunderbar:

    Code :
    1
    2
    
    Coord c1 = new Coord(17,20);
    if(c1.equals(new Coord(17,20)) System.out.println("c1 == (17,20)");

    Allerdings kann ich nicht ganz nachvollziehen, warum die equals()-Methode des Coord-Objektes auf die privaten Membervariablen einer anderen Instanz dieser Klasse zugreifen kann.
    Kann mich da mal jemand aufklären, was es damit auf sich hat?

    Mit freundlichen Grüßen
    Data
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Zitat Zitat von Data1992 Beitrag anzeigen
    Kann mich da mal jemand aufklären, was es damit auf sich hat?
    Das ist einfach die Semantik von private. Siehe z.B. auch Privat ist nicht ganz privat: Es kommt darauf an, wer’s sieht in der Java-Insel.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    Data1992 Tutorials.de Gastzugang
    Hallo Matthias,
    vielen Dank! Auf sowas wäre ich nie im Leben gekommen. Gut, dass uns unser Professor sowas verschwiegen hat... :-|

    Gruss
    Data
     

  4. #4
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    Jedoch ist die equals Methode inhaltlich falsch.

    Das Object value wird nicht auf null bzw. auf Coord geprüft, um dann false zurückzugeben. Daher würde dabei eine NullPointerException/ClassCastException fliegen, was nach der Spezifikation zu equals() nicht erlaubt ist. Siehe auch die API von Object dazu.
    Z.B.
    Code java:
    1
    2
    3
    
    if (!(value instanceOf Coord)) {
        return false;
    }
    Des Weiteren fehlt die hashCode Methode wodurch automatisch, der Vetrag zur hashCode Methode gebrochen wurde. Normalerweise überschreibt man immer beide Methoden.
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

  5. #5
    Avatar von matdacat
    matdacat matdacat ist offline Mitglied Platin
    Registriert seit
    Aug 2004
    Beiträge
    672
    Zitat Zitat von Data1992 Beitrag anzeigen
    Code :
    1
    2
    
      public equals(Object value) {
        return x == ((Coord) value).x & y == ((Coord) value).y;
    Hui, Du meinst wohl eher das logische Und (&&), nicht den Bitoperator &!
     

  6. #6
    Tsunamii Tsunamii ist offline Mitglied Silber
    Registriert seit
    Jul 2009
    Beiträge
    75
    Zitat Zitat von matdacat Beitrag anzeigen
    Hui, Du meinst wohl eher das logische Und (&&), nicht den Bitoperator &!
    sollte in diesem Fall egal sein, da boolean&&boolean und boolean&boolean das gleiche Ergebnis liefern
    der einzige Unterschied ist, dass bei && schon nach dem ersten Test abgebrochen wird, falls dieser false zurückgibt
     

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 18.03.10, 20:36
  2. Zugriff auf private-attribut
    Von Cherry07 im Forum Java Grundlagen
    Antworten: 10
    Letzter Beitrag: 27.04.08, 13:18
  3. Zugriff auf Membervariable [ 2 ]
    Von Geflügel im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 06.09.07, 14:27
  4. Zugriff auf Membervariable
    Von Geflügel im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 06.09.07, 14:03
  5. Antworten: 5
    Letzter Beitrag: 02.05.04, 21:02