【发布时间】:2008-11-05 21:12:54
【问题描述】:
我想从这个通用实用程序方法(具有许多类似方法的较大类的一部分)中删除所有“未检查”警告。在紧要关头,我可以使用 @SuppressWarnings("unchecked") 但我想知道是否可以正确使用泛型来避免警告。
该方法旨在允许调用者通过传递给 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) 行有编译错误“Comparable 类型中的方法 compareTo(capture#15-of ?) 不适用于参数 (Comparable”。
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 文档)。