Ich möchte alle "ungeprüften" Warnungen aus dieser allgemeinen Dienstprogrammmethode (Teil einer größeren Klasse mit einer Reihe ähnlicher Methoden) entfernen. Notfalls kann ich @SuppressWarnings("unchecked") verwenden, aber ich frage mich, ob ich Generika richtig verwenden kann, um die Warnung zu vermeiden.
Die Methode soll es dem Aufrufer ermöglichen, zwei Objekte durch Übergabe an compareTo zu vergleichen, mit der Ausnahme, dass, wenn das Objekt eine Zeichenkette ist, die Groß- und Kleinschreibung nicht berücksichtigt wird.
public static int compareObject(Comparable o1, Comparable o2)
{
if ((o1 instanceof String) && (o2 instanceof String))
return ((String) o1).toUpperCase().compareTo(((String) o2).toUpperCase());
else
return o1.compareTo(o2);
}
Dies war mein erster (fehlerhafter) Lösungsversuch. Die Parameter funktionieren gut, aber die Zeile o1.compareTo(o2) hat einen Kompilierfehler "Die Methode compareTo(capture#15-of ?) im Typ Comparable ist für die Argumente (Comparable) nicht anwendbar".
public static int compareObject(Comparable<?> o1, Comparable<?> o2)
{
if ((o1 instanceof String) && (o2 instanceof String))
return ((String) o1).toUpperCase().compareTo(((String) o2).toUpperCase());
else
return o1.compareTo(o2);
}
Irgendwelche Vorschläge?
0 Stimmen
Nur als eine allgemeine Anmerkung, sollten Sie wahrscheinlich mit compareToIgnoreCase statt konvertieren beide Zeichenketten in Großbuchstaben sein. Ihre Methode könnte subtile Bugs mit der Internationalisierung haben (siehe die toUpperCase-Dokumentation).