4

我不确定我的代码有什么问题......

    public Vector blob (Pixel px)
{
    Vector v = new Vector();

    Point p = new Point(px.getX(), px.getY());
    v.add(p);

    return v;
}

我得到以下信息:警告:[unchecked] unchecked call to add(E) as a member of raw type Vector

v.添加(p);

其中 E 是一个类型变量:E 扩展了在类 Vector 中声明的 Object。

浏览 API,add 函数将一个对象作为参数,我之前清楚地做了这一行,想法?

4

4 回答 4

6

从 Java-5 开始,java.util.Vector<E>它是一个通用容器,这意味着(用非常简单的术语)您可以指定您计划存储的元素的类型,并让编译器自动为您检查该类型。在没有元素类型的情况下使用它是可以的,但它会触发警告。

这应该消除警告,并提供额外的类型安全检查:

public Vector<Point> blob (Pixel px) {
    Vector<Point> v = new Vector<Point>();
    Point p = new Point(px.getX(), px.getY());
    v.add(p);
}

关于向量的另一件事是它们是同步容器。如果您不打算使用它们同步的事实,那么使用ArrayList<E>容器可能会更好。

于 2012-07-16T15:54:37.833 回答
5

泛型!!!您必须为向量的内容指定对象类型。要删除警告,矢量代码应该是这样的

Vector<Point> v=new Vector<Point>()
于 2012-07-16T15:53:16.540 回答
3

这是因为generics. Generics允许类型安全,编译器在编译时检查类型。当您使用raw types泛型参数类/方法时,您将收到此警告。

原始类型是那些不为泛型参数提供具体实现的类型。

在这种情况下,向量类的 add 方法是“通用的”,它允许告诉 add 方法接受的具体实现类型。

为了允许向后兼容,java 仍然允许您定义“原始类型”。阅读本文档以获取更多信息。

于 2012-07-16T15:53:44.323 回答
0

您忘记使用 Java 泛型。

简短回答:声明 Vector<Pixel > v = new Vector<Pixel >() 而不是
Vector v = new Vector()

长答案: 阅读泛型并了解其用法

此外,您可能需要重新考虑对 Vectors 的使用。这是一个解释原因的 SO 链接。

于 2012-07-16T15:55:48.240 回答