【问题标题】:Type safety: The method.. belongs to the raw type.. refs to generics should be parameterized类型安全:方法..属于原始类型..对泛型的引用应该参数化
【发布时间】:2014-02-04 11:59:08
【问题描述】:

Eclipse 在一个工作项目中只使用以下代码向我发出警告(在标题中),其中除了一个虚拟类和一个 main 方法之外什么都没有:

List a = new ArrayList();
List<Integer> b = new ArrayList<Integer>();
int x = 19;
a.add(x);

最后一行触发警告。我不确定我在这里做错了什么,或者真的,我什至在做什么。我是一名学习可疑教程的 Java 学生,我正在尝试理解泛型。据说,变量 x 没有说明类型安全。我尝试将它转换为 Object 类型(我认为它什么都不做,因为它已经是)但它不起作用。

我该如何解决这个警告?

【问题讨论】:

    标签: java eclipse


    【解决方案1】:

    你声明了List a,没有类型参数。这就是 eclipse 抱怨类型安全的原因,因为您可以将任何类型的对象添加到该列表中。

    如果您查看ArrayList api 并查看类声明,您会看到它是这样声明的:

    public class ArrayList<E>
    

    用你想要的任何类替换 E。

    使用List&lt;Integer&gt; b,您已明确告诉编译器该列表仅包含Integer 对象的实例,编译器可以验证这一点,从而为您提供类型安全。

    【讨论】:

    • 啊,好吧。所以没什么好担心的(我被告知要写两行,这样做我得到了警告。我想问一下,因为我无法理解它的含义,因为它有点像我没有的技术术语'还没适应)。
    • @Stopforgettingmyaccounts... 在某种程度上,这是值得担心的,因为您不应该再使用原始列表,因为泛型为您提供了一种可确保类型安全的替代方案。这里的主要事情是要知道发生了什么:)
    猜你喜欢
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多