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 类是通用的;您应该指定它包含的对象的类型。在您的情况下,您似乎应该将其声明为包含 ObjectNumber (两者都是您似乎要添加的所有内容的超类):

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 最佳实践 对不起,我无法理解 Vector=new Vector(3,4); 的概念这里有什么用,能解释一下吗 @user2545197 - Number(不是number)是IntegerFloat等的基类。符号&lt;Number&gt;是在使用a时指定类型参数的方式泛型类。 Vector&lt;Number&gt; 告诉编译器这个特定的Vector 将只包含Number 的实例。泛型提供了一种在编译时提高类型安全性的方法,并大大减少了将对象转换为特定类型的需要。有关这方面的更多信息,请参阅Java tutorial on generics。 谢谢,但请让我知道,如果我将 放在 Vector 中,这样我是否会将我的向量元素限制为数字类型的值。如果我我问错了问题..提前谢谢。 @user2545197 - 如果您不想限制您在 Vector 中放置的内容,那么您始终可以使用 &lt;Object&gt; 作为您的类型参数。这没有任何限制,因为任何进入Vector 的东西都必须是Object(集合类不能包含原始值)。您在编译时牺牲了所有类型检查,但如果那是您所需要的......并不是说一个裸露的VectorVector&lt;Object&gt; 在功能上(和语义上)是相同的;不同的是,在第二种情况下,你已经明确告诉编译器你想要什么,所以它不会发出任何警告。【参考方案2】:

您缺少泛型类型。 您可以将您的 Vector 声明为

Vector<Number> v = new Vector<Number>(3, 4);

【讨论】:

以上是关于VetorTest.java 使用未经检查且不安全的操作与 -Xlint 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java中的使用了未经检查或不安全的操作

Ant出现"使用了未经检查或不安全的操作"

Flutter 插件:InAppPurchasePlugin.java 使用未经检查或不安全的操作

Firestore 问题:CloudFirestorePlugin.java 使用未经检查或不安全的操作

颤动不安全的未经检查的操作并过度使用已弃用的 api 错误

使用了未经检查或不安全的操作;请使用 -Xlint:unchecked 重新编译。