Я хотел бы удалить все «непроверенные» предупреждения из этого общего метода полезности (часть более крупного класса с рядом аналогичных методов). В крайнем случае я могу использовать @SuppressWarnings («unchecked»), но мне интересно, могу ли я правильно использовать дженерики, чтобы избежать предупреждения.Использование общих параметров со статическим методом compareObject
Метод предназначен для того, чтобы вызывающие могли сравнивать два объекта путем прохождения через compareTo, за исключением того, что если объект является строкой, он делает это нечувствительным к регистру образом.
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);
}
Это была моя первая (неправильная) попытка решения. Параметры работают отлично, но линия o1.compareTo (o2) имеет ошибку компиляции «Метод CompareTo (захват # 15-о?) В типе Сравнительное не применяется для аргументов (Сопоставимые».
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);
}
?
Любые предложения
Как правило, вы, вероятно, должны использовать compareToIgnoreCase вместо преобразования обеих строк в верхний регистр. У вашего метода могут быть тонкие ошибки с интернационализацией (см. Документацию toUpperCase). – 2008-11-05 21:37:59
Отличная точка - изменится! – 2008-11-05 22:06:51