Vergleiche bei generischen Datentypen

Guten Morgen,

da ich schon seit längerem über folgendem Problem brüte und mich dabei immer weiter verstricke, bitte ich um einen Blick von außen. Es geht also um folgendes, ganz vereinfacht dargestellt:

Ich habe ein Klasse, die grundsätzlich erstmal mit <T> parametrisiert ist.
Java:
public class foo<T> {
  T foo1;
  T foo2;

  // Konstruktor...
}
Ziel soll sein, dass dieser primitive Container grundsätzlich verschiedene Datentypen schlucken soll, also..
Java:
public static void main(String[] args) {
    foo<Integer> f1 = new foo<Integer>(4, 5);
   foo<Double> f1 = new foo<Double>(4.0, 5.0);
}


In der Klasse foo soll der Vergleich stattfinden. Da die Vergleichsoperatoren <, >, ==, ... ja allein auf primitive Datentypen anzuwenden sind, müssen wir andere Geschütze auffahren.
Folgende Überlegung:
Java:
public class foo<T extends Comparable<T>> implements Comparable<T> {
  T foo1;
  T foo2;

  // Konstruktor...

  @Override
  public int compareTo(T o) {
       return 0;
  }
Meine Hürde ist jetzt, wie ich innerhalb compareTo konkret den Vergleich anstellen soll.
Mit this.foo1 > this.foo2 stehe ich ja wieder vor der selben Wand.

Kann mir jemand einen Tip geben?

Besten Dank, Gruß
 
Hallo!

Vielen Dank für eure schnellen und informativen Antworten! Post #4 hat mir geholfen, zumindest das konkrete Problem zu lösen!

Über das komplette Verständnis reden wir lieber mal noch nicht, die Gefahr dass ich in den Fettnapf trete ist hoch :-D


@ #2 / #3
Mein Ziel ist foo1 / foo2 direkt miteinander zu vergleichen. Stellt euch vor es ist später eine Liste, die mit QuickSort sortiert werden soll, wobei das Programm eben kompatibel zu unterschiedlichen Datentypen sein soll.

@ #5
Ok darüber muss ich nachdenken!

Danke erstmal!
 
Ok darüber muss ich nachdenken!
Was Du ja schon gemacht hast:
Mein Ziel ist foo1 / foo2 direkt miteinander zu vergleichen
Aber evtl. hilft es, mal bessere Namen zu verwenden. Nennen wir das Kind mal nicht foo sondern Paar. Ein Paar stellt also zwei T-Objekte dar. Durch Paar implements Comparable<T> sagst Du nun, dass Du ein Paar mit T vergleichen, also Aussagen wie (1,3) < 2 treffen kannst. Derlei Aussagen sind ... strange :)

Tatsächlich willst Du aber einfach eine Methode haben, die die beiden Komponenten des Paares miteinander vergleicht.
 
@ #2 / #3
Mein Ziel ist foo1 / foo2 direkt miteinander zu vergleichen. Stellt euch vor es ist später eine Liste, die mit QuickSort sortiert werden soll, wobei das Programm eben kompatibel zu unterschiedlichen Datentypen sein soll.
Du weißt aber schon was Post #4 macht? Post #4 sortiert später die Liste so:
- Zuerst kommen alle Objekte (class foo) in der Liste, bei denen foo1 kleiner ist als foo2
- Dann alle foo1==foo2
- Und dann alle foo1>foo2
Wenn das das Ziel ist dann gut


Den Teil implements Comparable<T> brauchst du nicht meiner Meinung nach, denn damit vergleichst du die class foo und nicht foo1 mit foo2.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben