首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么javac认为在泛型类上调用具有泛型返回的方法是不安全的?

为什么javac认为在泛型类上调用具有泛型返回的方法是不安全的?
EN

Stack Overflow用户
提问于 2015-05-03 00:58:49
回答 2查看 824关注 0票数 16

考虑以下代码:

代码语言:javascript
复制
public class Main {
    public static class NormalClass {
        public Class<Integer> method() {
            return Integer.class;
        }
    }

    public static class GenericClass<T> {
        public Class<Integer> method() {
            return Integer.class;
        }
    }

    public static void main(String... args) {
        NormalClass safeInstance = new NormalClass();
        Class<Integer> safeValue = safeInstance.method();

        GenericClass unsafeInstance = new GenericClass();
        Class<Integer> unsafeValue = unsafeInstance.method();
    }
}

如果我用以下命令编译它:

代码语言:javascript
复制
$ javac -Xlint:unchecked Main.java 

它返回:

代码语言:javascript
复制
Main.java:16: warning: [unchecked] unchecked conversion
        Class<Integer> unsafeValue = unsafeInstance.method();
                                                          ^
  required: Class<Integer>
  found:    Class
1 warning

请注意,只有泛型方法被认为是不安全的,即使在返回类型上没有引用泛型类型。

这是一个javac错误吗?或者我没有考虑到一个更深层次的原因?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30005025

复制
相关文章

相似问题

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