# vergleichbare Object-Objekte generisch vergleichen



## dArignac (7. Jan 2006)

Schwierig einen Titel zu finden der aussagt was ich will 

Also, es geht darum 2 Objects in Java 1.5 zu vergleichen. Wir können davon ausgehen dass die Objects Instanz von Comparable sind, sich also irgendwie vergleichen lassen.

Die klassische Variante sieht demnach so aus:


```
if ((o1 instanceof Comparable) && (o2 instanceof Comparable))
            return ((Comparable)o1).compareTo(o2)
```

Der Cast auf Comparable in 1.5 bringt nun natürlich einen Typsicherheitsfehler, Comparable ist ja nicht mehr nur Comparable sondern Comparable<T>:



> Type safety: The method compareTo(Object) belongs to the raw type Comparable. References to generic type Comparable<T> should be parameterized



Meine Frage nun, wie ist das zu lösen?

Ich dachte man könnte dem Comparable sagen dass er da ein Object hat, also (Comparable<Object>) o1.
Aber das ist wohl auch nicht so gut, weil:



> Type safety: The cast from Object to Comparable<Object> is actually checking against the erased type Comparable



Irgendwann werde ich mit den Generics noch wahnsinnig. Aber trotzdem danke für Tipps etc.


----------



## Campino (7. Jan 2006)

Das sind beides Warnings, keine Errors...notfalls kann man sie als ignorieren...


----------



## Lim_Dul (7. Jan 2006)

Ich vermute mal, du bist auf eine der Generics Warnungen gestossen, wo man sich allenfalls den Typ der Warnung aussuchen kann, aber die Warnung ansich direkt im Source-Code nicht loswird.
Für sowas gibt es die Annonations wie @SuppressWarnings. Wie genau die funktioniert, musst du aber selber mal nachschlagen.


----------



## Beni (7. Jan 2006)

Wenn ihr schon wisst, dass die Objekte Comparables sind, wieso müsst ihr dann noch casten? Wieso speichert ihr sie nicht schon als Comparables? :wink:


----------



## SlaterB (8. Jan 2006)

Beni hat gesagt.:
			
		

> Wenn ihr schon wisst, dass die Objekte Comparables sind, wieso müsst ihr dann noch casten? Wieso speichert ihr sie nicht schon als Comparables? :wink:


würde dann nicht an dieser Stelle die Warnung kommen?


----------

ist das nur bei Comparable oder gibts bei jedem Cast so eine komische Meldung? 

wenn nur bei Comparable, dann lohnt es sich ja fast schon ne eigene Klasse MyComparable zu schreiben


----------



## Beni (8. Jan 2006)

IMHO dürfte es bei jedem Cast, sicher ab bei Casts mit einem generischen Typ, eine Warnung geben.

Daher ist der Trick, nie zu Casten (ich weiss, das lässt sich nicht immer umgehen...)


----------



## Bleiglanz (8. Jan 2006)

Comparable<? extends Object>


----------



## dArignac (13. Jan 2006)

Beni hat gesagt.:
			
		

> Wenn ihr schon wisst, dass die Objekte Comparables sind, wieso müsst ihr dann noch casten? Wieso speichert ihr sie nicht schon als Comparables? :wink:



Naja, das sind die Werte aus einer JTable, geht also schlecht. Muss ich wohl die Warnungen erstmal unterdrücken.


----------

