首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的Typechecking和泛型生成警告。

java中的Typechecking和泛型生成警告。
EN

Stack Overflow用户
提问于 2011-12-20 09:04:42
回答 2查看 145关注 0票数 2

我有以下内联比较器。

代码语言:javascript
复制
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>的引用应该参数化。

如果我按建议将类型参数化:

代码语言:javascript
复制
        if (o1 instanceof Comparable) {
            return ((Comparable<SampleClass>) o1).compareTo(o2);

然后我收到警告..。

类型安全:未检查的从SampleClassComparable<SampleClass>的转换

如果我做打字:

代码语言:javascript
复制
    if (o1 instanceof Comparable<SampleClass>) {
        return ((Comparable<SampleClass>)o1).compareTo (o2);

我得到以下错误

无法执行针对Comparable<SampleClass>类型的实例检查。使用表单Comparable<?>代替,因为泛型类型信息将在运行时被删除。

同样,如果我遵循错误消息的建议:

代码语言:javascript
复制
    if (o1 instanceof Comparable<?>) {
        return ((Comparable<?>)o1).compareTo (o2);

我知道这个错误:

类型Comparable<capture#4-of ?>中的方法compareTo(capture#4-of ?)不适用于参数(SampleClass)

现在我不知道该如何处理,我真的准备了没有警告和错误的代码。如何生成具有通缉行为的无警告代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-20 09:11:49

您面临的问题是编译器无法知道您所做的工作是安全的。相反,您必须相信自己知道自己在做什么,并且可以添加这个注释。

代码语言:javascript
复制
@SuppressWarnings("unchecked")

不管是方法还是课堂,警告都消失了。

票数 4
EN

Stack Overflow用户

发布于 2011-12-20 09:17:04

试一试

代码语言:javascript
复制
 if (o1 instanceof Comparable<?>) {
        return ((Comparable<SampleClass>)o1).compareTo (o2);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8572982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档