当前位置: 首页 > 面试题库 >

使用Vector的Java警告:未选中的add(E)调用

韩阳云
2023-03-14
问题内容

令人反感的代码

Vector moves = new Vector();

moves.add(new Integer(x));

错误:

ConnectFour.java:82: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.Vector moves.add(new Integer(x));

不确定这样的错误需要多少信息。


问题答案:

问题在于上面的代码没有使用泛型。

以下将起作用:

Vector<Integer> moves = new Vector<Integer>();

move.add(new Integer(x));

<>(如果为VectorE则为要保存的元素的type参数)内部的类型名称告诉编译器应期望的对象类型。

如果尝试添加一个指定类型的对象(例如,在这种情况下,尝试添加String和)Vector<Integer>,则会发生编译时错误,这表明正在使用一种非预期类型的​​对象添加。

就是说,应该尽量不要使用Vector该类。为了更多的目的,List例如ArrayList从Java
Collections
Framework

实现的类就足够了,并且性能更好。

编辑

尽管与泛型问题没有直接关系,但亚当·佩恩特(Adam Paynter)在有关使用自动装箱的评论中提出了一个很好的观点。

从Java 5开始,原语及其包装类(例如int和)Integer将根据需要在彼此之间自动转换。

因此,可以将指定为intint文字的值添加到期望包含的类中Integer

Vector<Integer> v = new Vector<Integer>();
v.add(5);    // Not necessary to use an Integer value.


 类似资料:
  • 问题内容: 我一直在尝试使此代码在这个阶段适合年龄。它的目的是计算一个范围内的素数,我已经编写了一种打印它们的方法。不幸的是,该代码由于警告而无法编译: “警告:[未经检查]以未经检查的方式将add(E)作为原始类型java.util.List的成员进行调用” -我从谷歌搜索中了解到,该警告不是为了声明您应该输入哪种类型的值,但是我已经这样做了,并且该错误似乎仅在尝试在我的.add()函数上出现数

  • 我在应用程序启动时从数据库中检索一些默认值,并使用它来设置活动中微调器项的选定值。 代码工作正常,但问题是我在Android Studio中收到一个警告,警告对a.getPosition调用中作为原始类型“android.widget.ArrayAdapter”成员的“getposition(T)”的未检查调用。 我很高兴它的工作,但新的Android和Java我想了解和消除尽可能多的警告,从我的

  • 问题内容: 我的代码如下 “ try”块中的分配会导致警告说明 为什么是这样? 问题答案: 好吧,首先让我们弄清楚问题出在哪里-它在演员表中。这是一个简短的示例: 这仍然有同样的问题。问题在于强制类型转换实际上不会测试任何东西- 因为强制类型转换将有效地转换为原始类型。因为这有点让人惊讶,因为实际上对象 确实 知道所涉及的类,但是考虑类似的情况: 该类型转换将不会检查它是否 确实 是a ,因为该信

  • 我正在Netbeans IDE 8.2中制作一个商店,由于这个错误,我无法编译。我试着通过添加JComboBox来修复它,但是它没有解决我的问题。这个应用程序的网页版运行良好,但我无法编译它。当使用Xlint:Unchecked运行时,这是一个警告:[unchecked]作为原始类型JComboBox list.addItem(s)的成员对addItem(E)的未检查调用;其中E是一个类型变量:E