VetorTest.java 使用未经检查且不安全的操作与 -Xlint 错误 [重复]
Posted
技术标签:
【中文标题】VetorTest.java 使用未经检查且不安全的操作与 -Xlint 错误 [重复]【英文标题】:VetorTest.java uses unchecked and unsafe operation With -Xlint error [duplicate] 【发布时间】:2013-07-03 06:16:43 【问题描述】:我收到此错误,但不知道如何解决。我已经阅读了该帖子,但仍然感到困惑。 我试图运行 Xlint File.java 但它不工作。 运行此代码时,我收到类似
的消息"VectorTest.java 使用未经检查或不安全的操作
使用 -Xlint:unchecked for details 重新编译"
import java.util.Vector;
import java.util.Enumeration;
public class VectorTest
public static void main(String args[])
Vector v=new Vector(3,4);
System.out.println("Initial size"+ v.size());
System.out.println("Initial capacity"+ v.capacity());
v.addElement(new Integer(1));
v.addElement(new Float(2.5));
v.addElement(new Double(3.45));
v.addElement(new Integer(4));
v.addElement(new Integer(5));
System.out.println("Current Capacity"+ v.capacity());
v.addElement(new Integer(6));
v.addElement(new Integer(7));
v.addElement(new Integer(8));
v.addElement(new Integer(9));
v.addElement(new Integer(10));
v.addElement(new Integer(11));
v.addElement(new Integer(12));
System.out.println("Current Capacity"+ v.capacity());
System.out.println("First element"+(Integer) v.firstElement());
System.out.println("Last element"+(Integer)v.lastElement());
Enumeration e;
e= v.elements();
while(e.hasMoreElements())
System.out.println("All elements"+ e.nextElement());
【问题讨论】:
【参考方案1】:Vector
类是通用的;您应该指定它包含的对象的类型。在您的情况下,您似乎应该将其声明为包含 Object
或 Number
(两者都是您似乎要添加的所有内容的超类):
Vector<Number> v = new Vector<>(3,4); // or new Vector<Number>(3,4) if pre-Java 7
警告应该会消失。
顺便说一句,最好使用构造Integer.valueOf(1)
等而不是new Integer(1)
。它允许重复使用可能被缓存的Integer
对象,从而减少内存使用。
【讨论】:
+1 用于解释,使用 Java 7 和valueOf
最佳实践
对不起,我无法理解 VectorNumber
(不是number
)是Integer
、Float
等的基类。符号<Number>
是在使用a时指定类型参数的方式泛型类。 Vector<Number>
告诉编译器这个特定的Vector
将只包含Number
的实例。泛型提供了一种在编译时提高类型安全性的方法,并大大减少了将对象转换为特定类型的需要。有关这方面的更多信息,请参阅Java tutorial on generics。
谢谢,但请让我知道,如果我将 Vector
中放置的内容,那么您始终可以使用 <Object>
作为您的类型参数。这没有任何限制,因为任何进入Vector
的东西都必须是Object
(集合类不能包含原始值)。您在编译时牺牲了所有类型检查,但如果那是您所需要的......并不是说一个裸露的Vector
和Vector<Object>
在功能上(和语义上)是相同的;不同的是,在第二种情况下,你已经明确告诉编译器你想要什么,所以它不会发出任何警告。【参考方案2】:
您缺少泛型类型。 您可以将您的 Vector 声明为
Vector<Number> v = new Vector<Number>(3, 4);
【讨论】:
以上是关于VetorTest.java 使用未经检查且不安全的操作与 -Xlint 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 插件:InAppPurchasePlugin.java 使用未经检查或不安全的操作