我有以下内联比较器。
private static class SampleSorter implements Comparator<SampleClass>{
public int compare(SampleClass o1, SampleClass o2) {
if (o1 instanceof Comparable) {
return ((Comparable) o1).compareTo(o2);
} else if (o2 instanceof Comparable) {
return -((Comparable) o2).compareTo(o1);
}
return 0;
}
}它生成以下警告:
Comparable是原始类型。对泛型类型Comparable<T>的引用应该参数化。
如果我按建议将类型参数化:
if (o1 instanceof Comparable) {
return ((Comparable<SampleClass>) o1).compareTo(o2);然后我收到警告..。
类型安全:未检查的从
SampleClass到Comparable<SampleClass>的转换
如果我做打字:
if (o1 instanceof Comparable<SampleClass>) {
return ((Comparable<SampleClass>)o1).compareTo (o2);我得到以下错误
无法执行针对
Comparable<SampleClass>类型的实例检查。使用表单Comparable<?>代替,因为泛型类型信息将在运行时被删除。
同样,如果我遵循错误消息的建议:
if (o1 instanceof Comparable<?>) {
return ((Comparable<?>)o1).compareTo (o2);我知道这个错误:
类型
Comparable<capture#4-of ?>中的方法compareTo(capture#4-of ?)不适用于参数(SampleClass)
现在我不知道该如何处理,我真的准备了没有警告和错误的代码。如何生成具有通缉行为的无警告代码?
发布于 2011-12-20 09:11:49
您面临的问题是编译器无法知道您所做的工作是安全的。相反,您必须相信自己知道自己在做什么,并且可以添加这个注释。
@SuppressWarnings("unchecked")不管是方法还是课堂,警告都消失了。
发布于 2011-12-20 09:17:04
试一试
if (o1 instanceof Comparable<?>) {
return ((Comparable<SampleClass>)o1).compareTo (o2);https://stackoverflow.com/questions/8572982
复制相似问题