Beispiel-Code mit Pair wird nicht compiliert.

Creonic68

Mitglied
Hallo liebe Freunde, ich als blutiger JAVA-Einsteiger habe mal wieder ein Problem bei der Compilierung eines Beispieles aus einem Buch.
Es geht um die Verwendung von "PAIR", ich vermute mal stark, das dort am Anfang noch eine pasende import-anweisung fehlt, konnte aber im Internet nichts finden.
Hier ist der entsprechende Quell-Code:

public class PairTest {
public static void printEqual(Pair pair, String title) {
if (pair.areValuesEqual()) {
System.out.println("Gleiches Paar in " + title);
} else {
System.out.println("Ungleiches Paar in " + title);
}
}

public static void main(String[] args) {
Pair<Integer> pair1 = new Pair<>(4, 5);
PairTest.printEqual(pair1, "pair1");
Pair<String> pair2 = new Pair<>("Hallo", "Hallo");
PairTest.printEqual(pair2, "pair2");
}
}

Als Fehlermeldung bekomme ich folgende Ausgabe, wenn ich das mit javac PairTest.java compilieren will:
PairTest.java:2: error: cannot find symbol
public static void printEqual(Pair pair, String title) {
^
symbol: class Pair
location: class PairTest
PairTest.java:11: error: cannot find symbol
Pair<Integer> pair1 = new Pair<>(4, 5);
^
symbol: class Pair
location: class PairTest
PairTest.java:11: error: cannot find symbol
Pair<Integer> pair1 = new Pair<>(4, 5);
^
symbol: class Pair
location: class PairTest
PairTest.java:13: error: cannot find symbol
Pair<String> pair2 = new Pair<>("Hallo", "Hallo");
^
symbol: class Pair
location: class PairTest
PairTest.java:13: error: cannot find symbol
Pair<String> pair2 = new Pair<>("Hallo", "Hallo");
^
symbol: class Pair
location: class PairTest
5 errors

Ich bedanke mich für eure Hilfe im Voraus.
LG Creonic68
 
Hallo liebe Freunde, ich als blutiger JAVA-Einsteiger habe mal wieder ein Problem bei der Compilierung eines Beispieles aus einem Buch.
Also es fehlt in Deinem Code die Klasse Pair. Als Anfänger solltest Du nicht sofort mit generischen Klassen beginnen.
Ich habe eine passende Klasse Pair erstellt. Kopiere Dir den Code, und versuche ihn zu verstehen.
Java:
public class Pair<T> {
    private T a;
    private T b;

    public Pair(T a, T b) {
        this.a = a;
        this.b = b;
    }

    public boolean areValuesEqual() {
        return a.equals(b);
    }

    @Override
    public String toString() {
        return "(" + a.toString() + " / " + b.toString() + ")";
    }
}

Java:
public class PairTest {
    public static void printEqual(Pair<?> pair, String title) {
        System.out.println(title);
        if (pair.areValuesEqual()) {
            System.out.println("Gleiches Paar\t" + pair);
        } else {
            System.out.println("Ungleiches Paar\t" + pair);
        }
    }

    public static void main(String[] args) {
        Pair<Integer> pair1 = new Pair<Integer>(4, 5);
        PairTest.printEqual(pair1, "Integer Paar");
        Pair<String> pair2 = new Pair<String>("Hallo", "Hallo");
        PairTest.printEqual(pair2, "String Paar");
    }
}
 
Also es fehlt in Deinem Code die Klasse Pair. Als Anfänger solltest Du nicht sofort mit generischen Klassen beginnen.
Ich habe eine passende Klasse Pair erstellt. Kopiere Dir den Code, und versuche ihn zu verstehen.
Java:
public class Pair<T> {
    private T a;
    private T b;

    public Pair(T a, T b) {
        this.a = a;
        this.b = b;
    }

    public boolean areValuesEqual() {
        return a.equals(b);
    }

    @Override
    public String toString() {
        return "(" + a.toString() + " / " + b.toString() + ")";
    }
}

Java:
public class PairTest {
    public static void printEqual(Pair<?> pair, String title) {
        System.out.println(title);
        if (pair.areValuesEqual()) {
            System.out.println("Gleiches Paar\t" + pair);
        } else {
            System.out.println("Ungleiches Paar\t" + pair);
        }
    }

    public static void main(String[] args) {
        Pair<Integer> pair1 = new Pair<Integer>(4, 5);
        PairTest.printEqual(pair1, "Integer Paar");
        Pair<String> pair2 = new Pair<String>("Hallo", "Hallo");
        PairTest.printEqual(pair2, "String Paar");
    }
}
 
Hallo blender3D, ich danke dir für deinen Hinweis, das sind Beispiele aus einem IT-Buch (IT-Handbuch für Fachinformatiker von Sacha Kersken / Rheinwerk), welches ich zu allgemeinen Wiederholung und Wissens-Auffrischung zur Zeit durcharbeite, weil ich meinen FISI 2003 abgeschlossen habe und sich eben viele Sachen verändert bzw. weiterentwickelt haben, ich habe mich vorher noch nie so wirklich mit java beschäftigt und bin beruflich eher im Fieldservice und Support / Administration zuhause, programmiert habe ich also ewig nicht mehr, teilweise ist das in dem Buch ein wenig zerrissen dargestellt, also nicht auf Anhieb ersichtlich ob ein Code-Schnipsel nun zu einem Beispielprogramm gehört was einige Zeilen später im buch gelistet ist, er hatte auch diese Klasse vorher gelistet, aber ich habe das nicht gerafft, das ich das in dem Listing vorher einfügen muss (Asche auf mein Haupt), vieles wird dort kurz angerissen und das wars, ich finde aber Java sehr cool und werde mir demnächst ein schönes JAVA-Buch kaufen, das steht fest auf meiner Agenda, also diese generischen Klassen sind nun mal ein Teil der Beispiele im Java-Kapitel, wie schon erwähnt, werde / kann ich mein Java-Wissen erst mit einem Buch vertiefen, was wirklich nur Java behandelt (kommt ;-)), Danke aber noch mal für deine schnelle Hilfe.

Liebe Grüße
Creonic68
 
IT-Handbuch für Fachinformatiker von Sacha Kersken
Dort gibt es auch Materialien zum Herunterladen: https://www.rheinwerk-verlag.de/it-handbuch-fur-fachinformatiker_4897/. Entpacken, die Java Beispiele sind im Kap. 09. So sieht Pair.java aus:
Code:
public class Pair<T> {
  private T value1;
  private T value2;

  public Pair(T _value1, T _value2) {
    value1 = _value1;
    value2 = _value2;
  }

  public boolean equal() {
    if (value1.equals(value2)) {
      return true;
    }
    return false;
  }
}
 
Bei dem Code stil ist ein neues Buch sicher eine gute Idee
Um dies zu erklären. Den Code
Java:
  public boolean equal() {
    if (value1.equals(value2)) (
      return true;
    }
    return false;
  }
kann man einfacher schreiben als
Java:
  public boolean equal() {
    return value1.equals(value2);
  }
 
Zuletzt bearbeitet:
Um diess zu erklären. Den Code
Java:
  public boolean equal() {
    if (value1.equals(value2)) (
      return true;
    }
    return false;
  }
kann man einfahcher schreiben als
Java:
  public boolean equal() {
    return value1.equals(value2);
  }
Wobei besser ist:

Java:
  public boolean equal() {
    return Objects.equals(value1, value2)
  }
Dann ist es auch null safe und man erhält keine NullPointerExceptions.
 
Hallo LimDul,

da hast du natürlich recht. Ich wollte nur darauf hinweisen, dass folgene Konstrukte in einem ernstzunehmenden Tuutorial nichts zu suchen haben:
Java:
if (true) {
  return true;
} else {
  return false;
}
 

Zurück
Oben